singletonObjects:一级缓存,用户存放完全初始化好的bean对象
earlySingletonObjects:二级缓存,存放半成品的bean(没有注入依赖,属性设置)
singletonFactories:三级缓存,存放对象工厂
bean产生的过程,实例化==>初始化
例如:
A类中引入B类,B类中也引入A类,就会存储循环引用的问题
1.标记A类为正在创建中,先实例化A类,并把A类对象工厂放入singletonFactories(三级缓存中)
2.初始化A类,发现需要注入B类,怎么办,那只能先实例化B类
3.标记B类为正在创建中,实例化B类,并把B类对象工厂放入singletonFactories(三级缓存中)
4.初始化B类,依赖注入A类,这时候,因为知道A类正在创建中,所以可以从三级缓存中取出A类对象工厂,通过工厂可以获取A类的实例,放入到earlySingletonObjects(二级缓存)中
,同时删除A类在三级缓存中数据
5.B类完成初始化后,把B类对象放入到singletonObjects(一级缓存)中,同时删除B类在三级缓存中的数据
6.A开始初始化,这时候依赖注入B类,直接从一级缓存中,就可以取到B类对象,完成实例化,把A类放入到一级缓存中,删除A类,在二级缓存中数据
| 留言与评论(共有 0 条评论) “” |