@Component
public class Aservice {
@Autowired
private Bservice Bservice;
}
@Component
public class Bservice {
@Autowired
private Aservice aservice;
}
如以上代码Aservice属性中含有Bservice,Bservice属性中含有Aservice,这样的情况称为循环依赖
在Spring中这样的循环依赖是如何形成的呢?
Spring管理的对象叫做Bean,Bean的生命周期如下
构造Aservice对应的bean的过程
1.启动扫描类–》BeanDefinition
2.Aserivice aService=new Aservice(); //创建对象
3.aService填充属性-------》发现单例池中没有Bservice对象—》等待Bservice的bean构造一个Bservice对象-------------------等待中-----------
4.Aware,init
5.BeanPostProcessor:后置处理器对前面的生成的对象进行加工
6.单例池(singletonObjects,beanName:bean对象)
构造Bservice对应的bean的过程
1.启动扫描类–》BeanDefinition
2.Bserivice bService=new Bservice(); //创建对象
3.bService填充属性-------》发现单例池中没有Aservice对象—》等待Aservice的bean构造一个Aservice对象-------------------等待中-----------
4.Aware,init
5.BeanPostProcessor:后置处理器对前面的生成的对象进行加工
6.单例池(singletonObjects,beanName:bean对象)
注意:我们发现构造Aservice对应的bean的过程和构造Bservice对应的bean过程都停在了第三步,都无法执行第四步操作,这就是spring循环依赖
spring的解决方法访问我的博客