我正在开发一个项目,该项目使用 Spring 配置的 Java(而不是 xml)风格来连接依赖项。它还具有分析逻辑,应通过 AspectJ 将其编织到所需的方法上(通过注释)。设置正在运行,我可以看到我想要的包中的类正在编织,并且分析信息已从其中注销。
问题是编织不起作用@Bean
类。我已经启用了调试aop.xml
via:
<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
and AnnotatedClass2
住在同一个包中,编织工作在直接实例化的包上,而不是由 bean 返回的包上。
我已经搜索过Spring AOP 文档 http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-aj-configure但我似乎找不到与此相关的任何内容。您需要对自动代理执行一些魔法,并对 SpringAOP 执行一些限制,但据我所知,加载时编织应该可以正常工作 - 例如,我已经尝试过私有方法,并且它有效。
问题是返回类型 - 如果我这样做:
@Bean
Object annotatedClass1() {
return new AnnotatedClass1(new AnnotatedClass2());
}
编织也开始对豆子起作用。我最初的假设是,这与 Spring 缓存 bean 而不是使用编织版本有关,但这没有意义,因为:
- 加载时间编织应该在……类加载时间起作用:)。然后,无论方法返回什么,类都应该具有方面。
- 我实际上已经检查了 Spring 和 AspectJ 的调试输出,但没有提及我的类,因此它一定以某种方式被忽略了。
这是我第一次使用这个东西,所以我可能会误解一些东西。如果有人可以解释为什么返回类型@Bean
方法与编织有关,我很乐意接受你的答案,而不是这个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)