我无法让AspectJ在我的主项目中使用@configurable注释的类上执行加载时编织。没有设置字段,也没有触及任何设置器。
我认为配置本身没有问题,因为我已经解压缩了配置并在较小的沙箱项目上进行了测试。只是为了它,我会把它包含在这个问题中。
所以,我想知道:
最后,无论我提取什么代码(请原谅混淆):
从配置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() { ... }
}
修改
嗯,事实证明它由于循环依赖而无法正常工作。哦,亲爱的,我喜欢处理遗留代码。不过,我原来的问题仍然存在。
答案 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方面:
后台会发生什么?
使用AspectJ加载时编织时, @Transactional 和 @Configurable 实现不再基于 JDK代理或 CGLIB代理但真实的AspectJ 方面。
要启用这些真实方面,您需要额外的jar文件。 jar还在自己的aop.xml中包含这些方面的声明
有关如何将Spring与AspectJ here
集成的更多详细信息