微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 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返回的那个.

我已经搜索the Spring AOP docs,但我似乎无法找到与此相关的任何内容.你需要为自动代理做一些魔术,以及SpringAOP的一些限制,但加载时间编织应该尽可能地工作 – 例如我试过私有方法并且它有效.

解决方法

问题是返回类型 – 如果我这样做:
@Bean
Object annotatedClass1() {
    return new AnnotatedClass1(new AnnotatedClass2());
}

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

>加载时间编织应该起作用,以及…类加载时间:).然后,该方法返回什么并不重要,该类应具有方面.
>我实际上检查了Spring和AspectJ的调试输出,没有提到我的类,所以它必须以某种方式被忽略.

这是我第一次使用这些东西,所以我可能会误解事物.如果有人能解释为什么@Bean方法的返回类型与编织有关,我很乐意接受你的答案,而不是这个.

原文地址:https://www.jb51.cc/java/129449.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐