我使用以下组件依赖树制作了一个简单的应用程序:
Service1 injects Service2(via constructor)
Service2 injects SomeContext(via setter)
SomContext injects Service1(via setter)
Advisor is for Service1
因此,当spring尝试构造Service1或Service2时,它会自动尝试应用劝告,但是spring中有一个检查-isCurrentlyInCreation(在BeanFactoryAdvisorRetrievalHelper.java中),因此它尝试为其应用劝告的bean仍然在创建并且跳过了劝告应用。
我知道bean的递归是一种不好的设计方式,但是现在很难解耦和重构。
我通过factorybean的SomeContext修复了此问题,并在需要时通过applicationcontext(applicationcontextaware)加载了Service1,但也许有人知道更好的解决方案?
最佳答案
如果您应用编译时编织而不是加载时编织,则可以解决此问题。这是两篇可以帮助您入门的文章:
Spring, Aspects, @Configurable and Compile Time Weaving using maven
Spring @Transactional: Verifying transaction support / Local method calls