首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring的AspectJ模式缓存与AspectJ模式事务

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

Stack Overflow用户
提问于 2014-06-16 18:50:00
回答 1查看 1.9K关注 0票数 6

我的问题涉及Spring的AspectJ模式,特别是如何启用它:

  1. 事务管理
  2. 缓存

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

代码语言:javascript
复制
@Configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)

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

将下面的jar放入Tomcat的lib目录:-Put org.springframework:spring-instrument-tomcat -Add,在Tomcat的server.xml中显示如下行:

代码语言:javascript
复制
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

-Add进行以下配置:

代码语言:javascript
复制
@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
public class LoadTimeWeavingConfiguration implements LoadTimeWeavingConfigurer {
    @Override
    public LoadTimeWeaver getLoadTimeWeaver() {
        return new ReflectiveLoadTimeWeaver();
    }
}

-to最终能够按以下方式使用AspectJ模式:

代码语言:javascript
复制
@Configuration
@EnableCaching(mode = AdviceMode.ASPECTJ)

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

EN

回答 1

Stack Overflow用户

发布于 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中不存在加载时编织代理,并且仍然希望通过类加载进行加载时,ReflectiveLoadTimeWeaverTomcatInstrumentableClassLoader才是必需的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24250220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档