/*** 测试循环依赖*/@Testpublic void testCyclicDependence(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext-cyclicDependence.xml");ABean aBean = applicationContext.getBean(ABean.class);aBean.print();}
从一级缓存中获取BeanA,获取不到
python源码剖析第二版?将断点设置到类AbstractBeanFactory中,定位到创建单例bean的方法getSingleton(),进入此方法
getSingleton()方法最终执行createBean方法,进行bean的创建,因此继续进入此方法
BeanA属性填充
BeanA属性填充BeanB
循环依赖应该避免吗。
此处流程和创建BeanA的流程一致
go循环依赖、
@SpringBootApplication、
二级缓存:复用(如果BeanA中有多个属性bean都依赖BeanB,此时就可以直接从二级缓存中取即可)
三级缓存:AOP增强
对象单一原则:不建议在一个集合中存储两种状态的对象,一级缓存存储走完spring生命周期的bean,二级缓存存储未走完的对象,三级缓存存储bean的工厂对象,并且可以生产通过AOP增强的对象BeanA存在循环依赖:三级缓存--->二级缓存--->一级缓存
BeanB不存在循环依赖:三级缓存--->一级缓存
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态