vlambda博客
学习文章列表

Java小节,spring源码分析(三)


我们知道Spring容器的 Bean 可以是单例 (把 scope 配置为 singleton 或者不设置 scope,即默认是单例),这些单例的 Bean 被初始化之后就被Spring注册到BeanFactory管理了起来,方便下次直接使用。除了配置的单例Bean,我们还可以调用BeanFactoryBean直接注册一个单例Bean



objectFactory singletonFactory 工厂---产生一个实例,三级缓存put一个从二级缓存中产生出的一个对象。

那么为什么spring不从二级缓存拿?

singletonObjects:一级缓存,存储beanNamekey)和bean实例(value)之间的关系,这里存储的bean实例是已经完全创建完成的bean实例

 

earlySingletonObjects:二级缓存,也是存储beanNamebean实例之间的关系,注意和singletonObjects的区别,这里存储的bean实例是没有创建完成的bean实例,即该bean还在创建过程中,为了解决循环引用的问题,将未创建完全的bean缓存起来。

singletonFactories:三级缓存,用于保存beanNamebean工厂之间的关系。当三级缓存创建bean成功后,会将bean放入二级缓存,并将beanName对应的beanFactorysingletonFactories中移除。

 

ObjectFactory:有getobject()方法,在创建单例bean的过程中,为了解决循环依赖问题,会创建beanName对应的ObjectFactory放入SingletonFactoies中,达到提前曝光bean的目的。三级缓存singletonFactory.getObject()(三级缓存)获取

 

Spring涉及到的设计模式有单例,工厂,适配器,观察者代理等。

下节我么讲学习相关设计模式,通过spring源码。

 

好的,本期就介绍的这里,喜欢我,关注我,了解我,我是雨兮