

比如我们容器中 TulingLog tulingLog = tcx.getBean(TulingLog.class); 容器中的过程是什么?
容器中的过程是什么?
1 2 3 4 5 6 7 8 9 10
| i1:>org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String) i2>org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean i3>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean 创建bean的方法 i4>org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean 真正的创建bean的逻辑 i5>:org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingleton 把创建好的实例化好的bean加载缓存中 i6>:org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance 对创建的bean进行后续的加工
|
doGetBean创建主要过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| i2.1>:org.springframework.beans.factory.support.AbstractBeanFactory#transformedBeanName 转换beanName i2.2>:org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton 去缓存中获取bean i2.3>:org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance 对缓存中的获取的bean进行后续处理 i2.4>:org.springframework.beans.factory.support.AbstractBeanFactory#isPrototypeCurrentlyInCreation 判断原型bean的依赖注入 i2.5>:org.springframework.beans.factory.support.AbstractBeanFactory#getParentBeanFactory 检查父容器加载bean i2.6>:org.springframework.beans.factory.support.AbstractBeanFactory#getMergedLocalBeanDefinition 将bean定义转为RootBeanDifination i2.7>:检查bean的依赖(bean加载顺序的依赖) i2.8>:org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton 根据scope的添加来创建bean
|
doCreateBean具体创建流程:
1 2 3 4 5 6 7 8
| i4.1>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance 调用构造函数创建对象 i4.2>:判断是否需要提早暴露对象(mbd.isSingleton() && this.allowCircularReferences && i sSingletonCurrentlyInCreation(beanName)); i4.3>org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingletonFactory 暴露对象解决循环依赖 i4.4>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean 给创建的bean进行赋值 i4.5>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean 对bean进行初始化
|
initializeBean初始化bean过程
1 2 3 4 5 6 7 8 9
| i4.5.1>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods 调用XXAware接口 i4.5.2>applyBeanPostProcessorsBeforeInitialization 调用bean的后置处理器进行对处理 i4.5.3>org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods 对象的初始化方法 i4.5.3.1>:org.springframework.beans.factory.InitializingBean#afterPropertiesSet 调用InitializingBean的方法 i4.5.3.2>:String initMethodName = mbd.getInitMethodName(); 自定义的初始化方法
|