spring 循环依赖

  • 属性注入、set方法注入
    spring内部会解决。解决方式: 假设A创建时,发现依赖 B对象后,会先创建依赖的 B对象。此时A对象还是个半成品。创建B时发现依赖A,会直接把半成品的B赋值给A。等B对象创建完,再回到A的创建流程里,把B对象赋值给A。

核心就是把依赖的对象先实例化出来一个半成品, 完成依赖关系的赋值操作。最后再把半成品对象补充完整。

  • @DependsOn导致的循环依赖、构造器注入导致的循环依赖
    spring无法解决。@dependsOn修饰的两个类,互相都要先于对方创建。无法解决; 构造器注入的是因为无法实例化。

  • 和代理对象产生的循环依赖
    可以解决,但是需要手动处理,比如修改类的名称,从而改变类的创建顺序。或使用lazy属性设置为true。

posted @ 2023-05-20 22:27  森林中大鸟  阅读(26)  评论(0)    收藏  举报