Ale*_*ian 7 java configuration aop spring aspectj
我正在开发一个项目,它使用Spring配置的Java(而不是xml)风格来连接依赖项.它还具有应通过AspectJ编织到所需方法(通过注释)的分析逻辑.设置工作正常,我可以看到我所需的包中的类被编织,并从中记录出分析信息.
问题是编织不适用于@Bean类.我在启动时启用了调试aop.xml:
<weaver options="-XnoInline -Xreweavable -verbose -debug -showWeaveInfo">
Run Code Online (Sandbox Code Playgroud)
我可以看到我所需的包中的类被编织,但不是配置中的bean.如果我直接实例化类(不注入它们)编织工作.
不幸的是,我不能在这里发布实际代码,但这里有一个愚蠢的例子:
@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
public class MySpringConfig {
@Bean
AnnotatedClass1 annotatedClass1() {
return new AnnotatedClass1(new AnnotatedClass2());
}
}
Run Code Online (Sandbox Code Playgroud)
AnnotatedClass1并且AnnotatedClass2直接实例化的同一个包和编织工作,而不是bean返回的那个.
我搜索过Spring AOP文档,但我似乎无法找到与此相关的任何内容.你需要做一些神奇的自动代理和SpringAOP的一些限制,但加载时间编织应该尽可能地工作 - 我已经尝试过私有方法,例如它有效.
问题是返回类型 - 如果我这样做:
\n\n@Bean\nObject annotatedClass1() {\n return new AnnotatedClass1(new AnnotatedClass2());\n} \nRun Code Online (Sandbox Code Playgroud)\n\n编织也开始对豆子起作用。我最初的假设是它与 Spring 缓存 bean 而不是使用编织版本有关,但这没有\xe2\x80\x99t 有意义,因为:
\n\n这是我第一次使用这个东西,所以我可能会误解一些东西。如果有人能解释为什么该@Bean方法的返回类型与编织有关,我\xe2\x80\x99d很乐意接受你的答案,而不是这个答案。
| 归档时间: |
|
| 查看次数: |
2987 次 |
| 最近记录: |