@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的解决方法访问我的博客

posted on 2020-11-11 15:25  凸凸大军的一员  阅读(56)  评论(0编辑  收藏  举报