当前位置: 首页 > 知识库问答 >
问题:

AspectJ加载时间编织在Spring bean上不起作用

叶晋
2023-03-14
<weaver options="-XnoInline -Xreweavable -verbose -debug -showWeaveInfo">
@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
public class MySpringConfig {
    @Bean
    AnnotatedClass1 annotatedClass1() {
        return new AnnotatedClass1(new AnnotatedClass2());
    }
}

AnnotatedClass1AnnotatedClass2位于同一个包中,编织工作在直接实例化的包上,而不是bean返回的包上。

我搜索了Spring AOP文档,但似乎找不到任何与此相关的内容。对于自动代理,您需要做一些魔术,对于SpringAOP也需要做一些限制,但是加载时间编织就我所知应该可以工作--例如,我已经尝试过私有方法,它可以工作。

共有1个答案

谷奕
2023-03-14

问题是返回类型-如果我这样做:

@Bean
Object annotatedClass1() {
    return new AnnotatedClass1(new AnnotatedClass2());
} 

编织也开始为豆子工作。我最初的假设是,这与Spring缓存bean和不使用weaved版本有关,但这没有意义,因为:

  • 加载时间编织应该在…类加载时间:)。然后,不管方法返回什么,类都应该有方面。
  • 我实际上已经检查了Spring和AspectJ的调试输出,但没有提到我的类,所以它一定被忽略了。
 类似资料:
  • 如果我使用的是基于AspectJ的Spring AOP,那么我是否需要配置我的方面来使用加载时间编织?或者Spring AOP在使用基于AspectJ的方法时也支持运行时/编译时编织吗?

  • 我参与了一个较老项目的审查任务。任务是将某些库更新到更新的版本。这个项目成功地使用了spring(4.3.14.Release),以及JDK 8下的AspectJ(1.9.0)和Tomcat8.0.20。现在spring将更新到最新版本(目前为5.3.3),Tomcat版本也将提升到最新版本(目前为9.0.37)。服务器应该在JDK11下运行。升级库后,我们意识到AspectJ不再工作了。所以我开

  • 我正在处理一个由许多WAR文件组成的多模块项目。这些项目使用Spring 4.0.5来管理依赖关系,使用带有加载时间编织的AsheJ 1.8.5来支持AOP(Spring基本AOP支持在这个项目中是不够的)。此外,META-INF目录中有一个aop.xml,配置非常简单: AOP主要用于提供各种服务和具有事务性行为(使用spring的@Transactional注释)的DAO(使用@Service

  • 当我设置Spring Ashej加载时间编织并通过关键字创建一个实例时,如下所示(下图)。事实证明,我无法访问构造函数中的依赖项。正如预期的那样,这一切都很好。执行顺序是 。现在,我可以访问构造函数中的依赖项。但问题是执行顺序: