spring是如何解决对象相互依赖的
2018-01-11 12:03
197 查看
第一种,解决setter对象的依赖,就是说在A类需要设置B类,B类需要设置C类,C类需要设置A类,这时就出现一个死循环,
spring的解决方案是,初始化A类时把A类的初始化Bean放到缓存中,然后set B类,再把B类的初始化Bean放到缓存中,
然后set C类,初始化C类需要A类和B类的Bean,这时不需要初始化,只需要从缓存中取出即可.
该种仅对single作用的Bean起作用,因为prototype作用的Bean,Spring不对其做缓存
第二种,解决构造器中对其它类的依赖,创建A类需要构造器中初始化B类,创建B类需要构造器中初始化C类,创建C类需要构造器中又要初始化A类,因而形成一个死循环,Spring的解决方案是,把创建中的Bean放入到一个“当前创建Bean池”中,在初始化类的过程中,如果发现Bean类已存在,就抛出一个“BeanCurrentInCreationException”的异常
spring的解决方案是,初始化A类时把A类的初始化Bean放到缓存中,然后set B类,再把B类的初始化Bean放到缓存中,
然后set C类,初始化C类需要A类和B类的Bean,这时不需要初始化,只需要从缓存中取出即可.
该种仅对single作用的Bean起作用,因为prototype作用的Bean,Spring不对其做缓存
第二种,解决构造器中对其它类的依赖,创建A类需要构造器中初始化B类,创建B类需要构造器中初始化C类,创建C类需要构造器中又要初始化A类,因而形成一个死循环,Spring的解决方案是,把创建中的Bean放入到一个“当前创建Bean池”中,在初始化类的过程中,如果发现Bean类已存在,就抛出一个“BeanCurrentInCreationException”的异常
相关文章推荐
- Spring如何解决循环依赖
- 关于怎么解决从ajax传入的json参数注入到Controller的接收对象 以及如何在Spring Boot项目使用参数校验
- Spring如何解决循环依赖
- Spring源码学习--Bean对象循环依赖问题解决(四)
- Spring如何解决循环依赖
- 如何在Struts2中获取spring的实例化对象
- 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?
- 如何解决引用对象时,必须加所有者(owner)的问题
- spring学习笔记3——注入依赖对象
- 没有纳入spring管理的类如何注入spring管理的对象
- Spring IOC 容器如何调用 对象的 set 和构造方法的
- 如何有效解决C与C++的相互调用问题
- 非spring托管对象如何获取到spring托管对象
- Spring学习总结(22)——Spring-framework-bom解决spring的不同模块依赖版本不同问题
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- 如何有效解决C与C++的相互调用问题
- 浅析spring中创建的对象如何保证不被回收
- Spring依赖注入的XML配置文件的实现思想(1)——准备工作:如何读取XML的文件的内容
- Spring Boot如何解决Mysql断连问题
- 如何解决openstack本机开发与运行环境的依赖包版本不一致?