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

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

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

所以,我想知道:

  1. 大项目中是否有任何可能阻碍Spring / AspectJ检测此特定类的内容?
  2. 有没有办法检查spring是否甚至意识到问题中的class级?

最后,无论我提取什么代码(请原谅混淆):

从配置XML:

       (...)    

而class级本身:

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

编辑:

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

你可能忘记了“ 编织 ”。 添加-javaagent:path/to/aspectjweaver.jar-javaagent:path/to/spring-agent.jar到你的comman行。

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

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

           

你有超过1个spring XML文件吗? 我相信我有一个问题不在我的XML文件的“最父”中。

一些提示你的问题。

为了使加载时间编织与Spring一起工作,不仅需要正确配置aop.xml ,还需要使用spring-instrument.jarspring-aspects.jar

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

  • @Transactional支持
  • @Configurable支持
  • JPAexception翻译支持
  • @Async注释用于调度支持

在后台发生了什么?

使用AspectJ加载时编织时,@ Transaction@Configurable实现不再基于JDK代理CGLIB代理,而是基于实际的AspectJ 方面

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

有关如何将Spring与AspectJ集成的更多详细信息