Jan*_*Jan 6 java spring javabeans
我有一组复杂的bean和它们之间的依赖关系.所有的豆类@Service,@Repository或@Controller注释我用的是@PostConstruct注释.有一些循环依赖,但Spring仍然正确初始化了系统.
然后我添加了一个简单的Controller,它只与一个服务有一个依赖关系.理论上,系统应该能够启动,因为理论上它可以像以前一样设置系统,然后是新的Controller.但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.
此问题的一个可能解决方案是编辑某些类的源代码,以通过setter而不是via构造函数进行配置.另一个解决方案是不使用构造函数注入并仅坚持setter注入.换句话说, 虽然除了最稀有的情况之外通常应该避免它,但是可以使用setter注入来配置循环依赖.与典型情况(没有循环依赖)不同,bean A和bean B之间的循环依赖将强制其中一个bean在完全初始化之前注入另一个bean(经典鸡/蛋场景).
| 归档时间: |
|
| 查看次数: |
9281 次 |
| 最近记录: |