我有一组复杂的 bean 以及它们之间的依赖关系。所有豆子都是@Service
, @Repository
or @Controller
带注释,我使用@PostConstruct
注解。虽然存在一些循环依赖,但系统仍然由 Spring 正确初始化。
然后我添加了一个简单的控制器,仅依赖于其中一项服务。理论上,系统应该能够启动,因为理论上它可以首先像以前一样设置系统,然后设置新的控制器。但 Spring 抱怨它无法设置上下文:
Error creating bean with name 'userService': Requested bean is currently in creation: Is there an unresolvable circular reference?
我可以以某种方式帮助 Spring 如何排序上下文初始化吗?我认为主要问题是userService
系统中大量使用它来进行身份验证。
最好的解决方案就是消除循环依赖;我还没有遇到过需要这样的结构的情况。但如果您确实想坚持使用它,那么上述问题可能是由于您在某处进行了构造函数注入:
循环依赖
如果您主要使用构造函数注入,则可以编写和配置您的类和 bean,从而创建无法解析的循环依赖场景。
考虑这样的场景:类 A 需要通过构造函数注入提供类 B 的实例,类 B 需要通过构造函数注入提供类 A 的实例。如果您为类 A 和 B 配置 Bean 相互注入,Spring IoC 容器将在运行时检测到此循环引用,并抛出 BeanCurrentlyInCreationException。
此问题的一种可能的解决方案是
编辑一些的源代码
您的课程可以通过以下方式配置
设置器而不是通过构造函数。
另一种解决方案是不使用
构造函数注入并坚持
仅设置器注入。换句话说,虽然除了最罕见的情况外,通常应该避免这种情况
情况,有可能
配置循环依赖
设置器注入。与典型的不同
情况(没有循环依赖),
bean A 之间的循环依赖
豆子 B 会强制其中一颗豆子
之前注射到另一个
本身已完全初始化(a
经典的先有鸡还是先有蛋的场景)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)