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());
}
}
AnnotatedClass1
和AnnotatedClass2
生活在同一个包中,并且编织工作直接实例化而不是由bean返回。
我已经通过Spring AOP文档进行了搜索,但我似乎无法找到与此相关的任何内容。 你需要为自动代理做些必要的事情,以及SpringAOP的一些限制,但是加载时间编织应该尽可能地发挥作用 - 例如我尝试过使用私有方法,并且它工作正常。
问题是返回类型 - 如果我这样做:
@Bean
Object annotatedClass1() {
return new AnnotatedClass1(new AnnotatedClass2());
}
编织也开始为豆类工作。 我最初的假设是,它与Spring缓存bean有关,而不是使用编织版本,但这没有意义,因为:
这是我第一次使用这个东西,所以我可能会误解事情。 如果任何人都可以解释为什么@Bean
方法的返回类型与编织有任何关系,我很乐意接受你的答案,而不是这个。