gpt4 book ai didi

spring autowired aop 循环依赖

转载 作者:IT老高 更新时间:2023-10-28 13:47:34 31 4
gpt4 key购买 nike

我正在使用带有 @ComponentScan 的 java 配置来初始化我的 bean和 @EnableAspectJAutoProxy(proxyTargetClass=true)使用 cglib 代理。

在这个项目中,我们使用 @Autowired 在它们之间自动连接了许多生成的服务。效果很好。

但是,对于其中一些服务,我添加了 @Async(我还在我的 @Configuration 添加了 @EnableAsync(proxyTargetClass = true) 类)。

在那之后,我得到:

Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'ConversationUserLocalService': Bean with name 'ConversationUserLocalService' has been injected into other beans [ConversationUserHistoryLocalService] i
n its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'a
llowEagerInit' flag turned off, for example.

我猜这是因为 Spring 在 AOP 创建代理之前使用 @Async 方法注入(inject)服务。这可能是问题吗?我应该如何修复它?

为了澄清我的问题,假设我有:

@服务 A、B 和 C;

A 自动连线 B 和 C,B 自动连线 A 和 C,C 自动连线 A 和 B;

C 有一个标记为@Async 的方法。

Spring初始化applicationContext时,尝试初始化A,但需要B&C,所以初始化了它们。但毕竟,AOP 尝试创建 C 的代理(因为 @Async),然后它检测到将 C 自动连接到 B 和 A 与 C 的代理不同,所以它失败了。

我希望这可以解释更多正在发生的事情。

最佳答案

最后我在服务上使用 @Lazy(使用带有 @Async 注释的方法)、以及对其进行了 Autowiring .这样我猜 Spring 只会在需要时初始化和 Autowiring 这些服务,而不是在应用程序上下文初始化时。

关于spring autowired aop 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985144/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com