Spring 的 AspectJ 模式缓存与 AspectJ 模式事务

问题描述 投票:0回答:1

我的问题与 Spring 的 AspectJ 模式有关,特别是如何启用它:

  1. 交易管理
  2. 缓存

1)我注意到,为了启用 AspectJ 模式进行事务管理,我只需要执行以下操作:

@Configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)

2)而为了使用 AspectJ 模式进行缓存,似乎必须:

-将以下jar放入Tomcat的lib目录中:

org.springframework:spring-instrument-tomcat
- 在 Tomcat 的 server.xml 中添加以下行:

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

-添加以下配置:

@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
public class LoadTimeWeavingConfiguration implements LoadTimeWeavingConfigurer {
    @Override
    public LoadTimeWeaver getLoadTimeWeaver() {
        return new ReflectiveLoadTimeWeaver();
    }
}

-终于能够使用AspectJ模式了,如下:

@Configuration
@EnableCaching(mode = AdviceMode.ASPECTJ)

以上说法对吗?如果是这样,为什么 AspectJ 模式缓存与 AspectJ 模式事务支持不同?

aspectj spring-aop spring-data-jpa spring-cache
1个回答
3
投票

@EnableCaching
的情况相比,不再需要为
@EnableTransactionManagement
情况列出的额外配置。

对于事务管理/缓存功能和

mode = AdviceMode.ASPECTJ
,这仅意味着将使用AspectJ而不是CGLIB代理。

如果启用编译时编织并将

spring-aspects-<version>.jar
列为方面库, 那么该解决方案应该可以开箱即用。 这假设所有其他必需的事务管理/缓存配置相关的 bean 在应用程序上下文中可用。

如果使用加载时编织而不是编译时, 添加 JVM 命令行参数

-javaagent:/path/to/aspectjweaver-<version>.jar
就足够了。

仅在以下情况下才需要

ReflectiveLoadTimeWeaver
TomcatInstrumentableClassLoader

  1. 您的构建中未使用编译时编织
  2. 虚拟机中不存在加载时编织代理,并且
  3. 仍然需要通过类加载进行加载时编织
© www.soinside.com 2019 - 2024. All rights reserved.