应用说明
我们有带有基于XML的Spring应用程序上下文的Spring( 5.1.11 )Web应用程序。项目相当大,我们大量使用组件扫描和xml描述来定义bean。 有几个方面为注释方法提供了一些建议。我们使用AspectJ定义和“加载时间编织”。
应用程序服务器-Caucho Resin 4.0.62(尽管在Tomcat 9.0.20上再现了相同的问题和行为)。
我们不不使用“ -javaagent”来应用 aspectjweaver-1.9.4.jar 或 spring-instrument-5.1.11.RELEASE.jar 。 如果您的应用程序服务器支持(https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-aj-ltw-environments),则始终按照文档中的说明应用方面没有任何问题:
您可以简单地启用加载时编织,如前所述。
问题描述
已经迁移到Spring 5.2.1 ,我们注意到一些豆不再被编织。经过调查,结果发现 autoscan 中的bean不再收到外观建议。 看来classloader加载这些类的时间太早了(在将变压器应用于classloader之前),因此它们将不再被编织。
作为一个副作用,我们注意到通过注释配置定义的bean(如果它们被定义为没有接口)也不能被编织。可能是由于相同的原因-类加载太早。但是这个问题在5.2.1之前存在(至少在Spring 5.1.11上存在)。
如果在任何版本的弹簧加载中都应用了外部javaagent,则编织可以按预期进行。
申请重现问题
请在此处找到演示该问题的小型Web应用程序:https://github.com/densp/aspectj-in-spring521
问题
- 没有Javaagent的默认类加载器上的AspectJ LTW有什么问题? Spring 5.2.x或我的配置有问题吗?行为已改变!
- 在注解配置中跳过没有接口的类的编织是否正确?
- 您能推荐一些解决方法吗?太多的bean无法更改其定义和/或进行重构。另一方面,外部代理会导致启动慢得多...