AspectJ加载时间编织不适用于Spring bean

我正在研究一个使用Spring配置的Java(而不是xml)风格的项目来连接依赖项。 它还具有应该通过AspectJ编写到所需方法(通过注释)的分析逻辑。 安装程序正在运行,我可以看到正在编译的所需程序包中的类以及将信息从其中注销的配置文件。

问题是编织不适用于@Bean类。 我已经通过以下方式在aop.xml启用了调试:

<weaver options="-XnoInline -Xreweavable -verbose -debug -showWeaveInfo">

而且我可以看到所需包中的类正在编织,而不是配置中的bean。 如果我直接实例化类(不注入它们)编织作品。

不幸的是,我不能在这里发布真正的代码,但这里有一个愚蠢的例子:

@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
public class MySpringConfig {
    @Bean
    AnnotatedClass1 annotatedClass1() {
        return new AnnotatedClass1(new AnnotatedClass2());
    }
}

AnnotatedClass1AnnotatedClass2生活在同一个包中,并且编织工作直接实例化而不是由bean返回。

我已经通过Spring AOP文档进行了搜索,但我似乎无法找到与此相关的任何内容。 你需要为自动代理做些必要的事情,以及SpringAOP的一些限制,但是加载时间编织应该尽可能地发挥作用 - 例如我尝试过使用私有方法,并且它工作正常。


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

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

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

  • 加载时间编织应该起作用,以及......上课时间:)。 然后,这个方法返回什么都没有关系,这个类应该有方面。
  • 我已经检查了Spring和AspectJ的调试输出,并没有提及我的类,所以它一定被忽略了。
  • 这是我第一次使用这个东西,所以我可能会误解事情。 如果任何人都可以解释为什么@Bean方法的返回类型与编织有任何关系,我很乐意接受你的答案,而不是这个。

    链接地址: http://www.djcxy.com/p/19401.html

    上一篇: AspectJ load time weaving not working on Spring beans

    下一篇: when does the main thread die?