spring 循环依赖
- 属性注入、set方法注入
spring内部会解决。解决方式: 假设A创建时,发现依赖 B对象后,会先创建依赖的 B对象。此时A对象还是个半成品。创建B时发现依赖A,会直接把半成品的B赋值给A。等B对象创建完,再回到A的创建流程里,把B对象赋值给A。
核心就是把依赖的对象先实例化出来一个半成品, 完成依赖关系的赋值操作。最后再把半成品对象补充完整。
-
@DependsOn导致的循环依赖、构造器注入导致的循环依赖
spring无法解决。@dependsOn修饰的两个类,互相都要先于对方创建。无法解决; 构造器注入的是因为无法实例化。 -
和代理对象产生的循环依赖
可以解决,但是需要手动处理,比如修改类的名称,从而改变类的创建顺序。或使用lazy属性设置为true。

浙公网安备 33010602011771号