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

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

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

 

 

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

 

 

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

Spring IOC(3)----bean实例化_第1张图片

 

 

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(3)----bean实例化_第2张图片

 

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

 

你可能感兴趣的:(Spring IOC(3)----bean实例化)