码迷,mamicode.com
首页 > 编程语言 > 详细

Spring IOC(3)----bean实例化

时间:2019-10-08 23:47:46      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:循环   spring   流程图   merge   返回   bean   default   判断   add   

前面一节说到invokeBeanFactoryPostProcessors方法的调用来注册bean定义,这次来看看finishBeanFactoryInitialization这个方法实例化非懒加载的单例bean。

1.从getBean到doGetBean先尝试从单例缓存池里面获取:DefaultSingletonBeanRegistry#getSingleton

技术图片

 

 

2.如果获取到了就返回了,如果获取不到则通过bean定义:AbstractBeanFactory#getMergedLocalBeanDefinition

技术图片

 

 

3.根据bean定义去实例化bean:AbstractAutowireCapableBeanFactory#createBean

技术图片

 

 

4.期间会对AOP的切面信息进行解析缓存:AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation

 

5.spring真正干活的方法一般都是doXXX,创建bean:AbstractAutowireCapableBeanFactory#doCreateBean

技术图片

 

 

6.实例化一个bean的包装对象(BeanWrapper):AbstractAutowireCapableBeanFactory#createBeanInstance,该方法内部实现及其复杂。。。。之后判断是否是单例,将对象暴露到缓存中,用于解决循环依赖问题;

 

7.对bean属性进行赋值:AbstractAutowireCapableBeanFactory#populateBean

 

8.对dean进行处理:AbstractAutowireCapableBeanFactory#initializeBean

    1.回调Aware接口方法:AbstractAutowireCapableBeanFactory#invokeAwareMethods

    2.调用bean的后置处理器生成代理对象返回(有可能生成对象返回):AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization/AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization

 

9.最后添加到各级缓存中:DefaultSingletonBeanRegistry#addSingleton

流程图:

技术图片

 

 Spring IOC(1-3)的流程图可以拼出来一个完整的从前期准备到注册bean定义,再到实例的流程,完整的流程如下技术图片

 

Spring IOC(3)----bean实例化

标签:循环   spring   流程图   merge   返回   bean   default   判断   add   

原文地址:https://www.cnblogs.com/nijunyang/p/11638560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!