spring三级缓存的理解

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 条评论) “”
   
验证码:

相关文章

推荐文章