我的问题涉及Spring的AspectJ模式,特别是如何启用它:
1)我注意到,为了启用事务管理的AspectJ模式,我只需执行以下操作:
@Configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)2)然而,为了使用AspectJ模式进行缓存,似乎必须:
将下面的jar放入Tomcat的lib目录:-Put org.springframework:spring-instrument-tomcat -Add,在Tomcat的server.xml中显示如下行:
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>-Add进行以下配置:
@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
public class LoadTimeWeavingConfiguration implements LoadTimeWeavingConfigurer {
@Override
public LoadTimeWeaver getLoadTimeWeaver() {
return new ReflectiveLoadTimeWeaver();
}
}-to最终能够按以下方式使用AspectJ模式:
@Configuration
@EnableCaching(mode = AdviceMode.ASPECTJ)上面说的对吗?如果是这样的话,为什么AspectJ模式缓存与AspectJ模式事务支持不同?
发布于 2016-12-28 22:17:11
您为@EnableCaching案例列出的额外配置并不比@EnableTransactionManagement更需要。如果选择mode = AdviceMode.ASPECTJ,就意味着它将使用AspectJ而不是CGLIB代理来实现事务管理/缓存功能。如果您已经启用了spring-aspects-<version>.jar作为方面库列出的编译时编织,那么它应该是开箱即用的(考虑到所有其他必需的事务管理/缓存配置相关bean都可在应用程序上下文中使用)。如果您不使用编译时编织,而是选择使用加载时编织,那么命令行上的-javaagent:/path/to/aspectjweaver-<version>.jar作为JVM参数就足够了。只有在构建时不使用编译时编织,并且VM中不存在加载时编织代理,并且仍然希望通过类加载进行加载时,ReflectiveLoadTimeWeaver和TomcatInstrumentableClassLoader才是必需的。
https://stackoverflow.com/questions/24250220
复制相似问题