码迷,mamicode.com
首页 > 编程语言 > 详细

Spring:bean的循环依赖问题

时间:2020-04-17 23:19:22      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:href   ==   deb   export   简介   无法   tick   一个   let   

【传送门】:通过循环依赖问题彻底理解 Spring IOC 的精华

1. 简介

  循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。

  Spring 中的循环依赖有构造器循环依赖和setter循环依赖。

2. 原因分析

2.1 构造器注入

  创建beanA时先要实例化beanA,实例化时构造器需要其他beanB,

  然后创建beanB,实例化beanB时又依赖beanA,

  此时已经发生环形依赖,初始化失败;

2.2 setter注入singleton 

  创建beanA时先要实例化beanA,实例化后setter方式注入beanB,

  然后创建beanB,实例化beanB,之后setter注入beanA,

  将实例化的beanA注入,创建beanB完成,

  返回beanB注入到beanA

2.3 setter注入prototype 

  创建beanA时先要实例化beanA,实例化后setter方式注入beanB,

  然后创建beanB,实例化beanB,之后setter注入beanA,

  此时发现beanA正在创建,然后抛出异常

2.4  我的理解

  单例bean允许注入一个实例化的bean,而不是创建完成的bean;

  prototype的bean不允许注入一个实例化的bean,需要注入一个创建完成的bean,所以此时循环依赖时无法完成初始化;

 

Spring:bean的循环依赖问题

标签:href   ==   deb   export   简介   无法   tick   一个   let   

原文地址:https://www.cnblogs.com/virgosnail/p/12723106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!