弹簧&x27;s AspectJ模式缓存与AspectJ模式事务

弹簧&x27;s AspectJ模式缓存与AspectJ模式事务,aspectj,spring-aop,spring-data-jpa,spring-cache,Aspectj,Spring Aop,Spring Data Jpa,Spring Cache,我的问题涉及Spring的AspectJ模式,特别是如何为以下各项启用它: 事务管理 缓存 1) 我注意到,为了启用AspectJ模式进行事务管理,我只需执行以下操作: @Configuration @EnableTransactionManagement(mode = AdviceMode.ASPECTJ) 2) 然而,为了使用AspectJ模式进行缓存,似乎必须: -将以下jar放入Tomcat的lib目录:org.springframework:spring-instrument-Tom

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

  • 事务管理
  • 缓存
  • 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"/>
    
    -最终能够使用AspectJ模式,如下所示:

    @Configuration
    @EnableCaching(mode = AdviceMode.ASPECTJ)
    

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

    您为
    @EnableCaching
    案例列出的额外配置并不比
    @EnableTransactionManagement
    案例中的配置更需要。如果选择
    mode=AdviceMode.ASPECTJ
    ,这意味着它将使用ASPECTJ而不是CGLIB代理来实现事务管理/缓存功能。如果您启用了编译时编织,并将
    spring aspects-.jar
    列为一个方面库,那么它应该是现成的(考虑到应用程序上下文中提供了所有其他必需的事务管理/缓存配置相关bean)。如果您不使用编译时编织,而是选择使用加载时编织,那么在命令行上使用
    -javaagent:/path/to/aspectjweaver-.jar
    作为JVM参数就足够了。
    ReflectVeloadTimeWeaver
    TomcatInstrumentableClassLoader
    仅在构建中未使用编译时编织,并且VM中不存在加载时编织代理,并且您仍然希望通过类加载进行加载时编织时才需要

    @Configuration
    @EnableCaching(mode = AdviceMode.ASPECTJ)