sprig bean 的生命周期还是通过AnnotationConfigApplicationContext来解读:
通过Bean先获得bean工厂对象,然后冲bean工厂中去拿去bean 的定义信息 最后默认的BeanFactory实现是DefaultListableBeanFactory对象
doGetBean这个方法包含了Spring bean 的生命周期的主线:
getSingleton()有三种重载方法:
第一种
在spring容器启动的时候,我们获得bean 对象,这个时候在缓存单利翅中还没有对应的对象就不会执行下面的逻辑直接返回一个null
这里是标记这个bean的定义信息是否已经被创建,,在registerSingleton()这个方法的时候会判断这个对象时候已经创建过
这是一个特别重要的方法:
之所以spring不能够解决构造器的循环依赖注入,就是这两个定法的分支的不同:
构造器的循环依赖注入是因为,在AutoWireConstructor()这个方法就解析了依赖的对象,然后创建依赖对象,程序一直在这个方法中执行,spring解决循环依赖是同过三级缓存实现的,而把创建的对象添加到三级缓存中的方法在后面的
addSingletonFactory()
AutoWire的三种注入模型: 依赖关系就只在这个几种注入模型中处理的,用过getBean冲缓存中去来取对象
到了这里spring对象的创建玩整 的结束了,最后贴一张全图
网友评论