Spring加载时编织没有检测用@configurable注释的类

时间:2009-09-07 14:53:46

标签: java spring aspectj

我无法让AspectJ在我的主项目中使用@configurable注释的类上执行加载时编织。没有设置字段,也没有触及任何设置器。

我认为配置本身没有问题,因为我已经解压缩了配置并在较小的沙箱项目上进行了测试。只是为了它,我会把它包含在这个问题中。

所以,我想知道:

  1. 大型项目中是否有任何可能阻碍Spring / AspectJ检测此特定类的内容?
  2. 有没有办法检查春天是否意识到问题中的班级?
  3. 最后,无论我提取什么代码(请原谅混淆):

    从配置XML:

    <context:annotation-config />
    <context:spring-configured />
    <context:component-scan base-package="se.isydev" />
    <context:component-scan base-package="se.istools" />
    <aop:aspectj-autoproxy />
    <context:load-time-weaver aspectj-weaving="on" />
    <context:property-placeholder location="classpath:settings.properties" />
    (...)
    <bean class="com.company.ClassToBeWeaved"
        scope="prototype">      
        <property name="injectedBean" ref="injectedBean" />
    </bean>
    

    班级本身:

    @Configurable
    public class ClassToBeWeaved {
        private InjectedBean injectedBean;
    
        @Required
        public void setInjectedBean() { ... }
    }
    

    修改

    嗯,事实证明它由于循环依赖而无法正常工作。哦,亲爱的,我喜欢处理遗留代码。不过,我原来的问题仍然存在。

4 个答案:

答案 0 :(得分:0)

您可能忘记了“weave”。将-javaagent:path/to/aspectjweaver.jar-javaagent:path/to/spring-agent.jar添加到命令行。

我还建议你@Autowire你的依赖,而不是明确地注入它。

答案 1 :(得分:0)

我相信LTW需要在类路径上使用META-INF / aop.xml。它应该看起来像:

<aspectj>
    <!--
        Uncomment this is you need AOP logging <weaver options="-verbose
        -showWeaveInfo
        -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler">
    -->
    <weaver>
        <include within="com.xxx.MyClass" />
    </weaver>
    <aspects>
        <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
        <include within="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
    </aspects>
</aspectj>

答案 2 :(得分:0)

你有超过1个spring XML文件吗?我相信我遇到了问题&lt; aop:aspectj-autoproxy /&gt;  不在我的XML文件的“最父”中。

答案 3 :(得分:0)

您的问题的一些提示。

要使用Spring加载时间编织,不仅需要正确配置 aop.xml ,还需要 spring-instrument.jar &amp; ;的弹簧aspects.jar中

这些jar文件包含自己的 aop.xml ,声明要处理的Spring方面:

  • @Transactional 支持
  • @Configurable 支持
  • JPA异常翻译支持
  • @Async 用于安排支持的注释

后台会发生什么?

使用AspectJ加载时编织时, @Transactional @Configurable 实现不再基于 JDK代理 CGLIB代理但真实的AspectJ 方面

要启用这些真实方面,您需要额外的jar文件。 jar还在自己的aop.xml中包含这些方面的声明

有关如何将Spring与AspectJ here

集成的更多详细信息