bean的加载-缓存中获取单例bean

单例只会在容器里面创建一次,后续获取bean直接从缓存中尝试获取,如果没有在尝试从singletonFactories中获取,创建bean的时候可能会出现依赖注入的情况,为了避免循环依赖,在还没有创建bean之前就会把bean的ObjectFactory加到缓存,依赖时,直接使用ObjectFactory就可以了

1、具体的实现方法


2、主要分为以下步骤

一、检查缓存中是否存在实例
二、实例如果为空,则锁定全局变量进行处理
三、如果bean正在加载则不处理
四、当一些方法需要提前初始化的时候会将对应的ObjectFactory初始化策略存储在singletonFactories

3、简单介绍

singletonObjects:用于保存BeanName和创建bean实例之间的关系 beanName,beaninstance
singletonFactories:用于保存beanName和bean工厂之间的关系 beanName,ObjectFactory
earlySingletonObjects:保存beanName和bean实例之间的关系,循环引用时则需getBean获取
registeredSingletons:用来保存当前所有注册的bean

猜你喜欢

转载自blog.csdn.net/zhangchangbin123/article/details/80741196
今日推荐