我正在开发一个项目,该项目使用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返回的那个。
我已经通过the Spring AOP docs进行了搜索,但我似乎无法找到与此相关的任何内容。你需要为自动代理做一些魔术以及SpringAOP的一些限制,但加载时间编织应该尽我所能 - 例如我尝试过私有方法并且它有效。
答案 0 :(得分:3)
问题是返回类型 - 如果我这样做:
@Bean
Object annotatedClass1() {
return new AnnotatedClass1(new AnnotatedClass2());
}
织布也开始对豆子起作用了。我最初的假设是它与Spring缓存bean有关,而不是使用weaved版本,但这没有意义,因为:
这是我第一次使用这些东西,所以我可能会误解事物。如果有人能解释为什么@Bean
方法的返回类型与编织有关,我很乐意接受你的答案,而不是这个。