spring bean的实例化过程

OrderService orderService = ctx.getBean(OrderService.class);容器中的过程是什么?

1:>org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String)

2:>org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean

    2.1:>org.springframework.beans.factory.support.AbstractBeanFactory#transformedBeanName 转换

beanName

    2.2:>org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton  去缓存

中获取bean

   2.3:>org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance 对

缓存中的获取的bean进行后续处理

    2.4:>org.springframework.beans.factory.support.AbstractBeanFactory#isPrototypeCurrentlyInCreation

判断原型bean的依赖注入

    2.5 >org.springframework.beans.factory.support.AbstractBeanFactory#getParentBeanFactory  检查父

容器加载bean

    2.6>org.springframework.beans.factory.support.AbstractBeanFactory#getMergedLocalBeanDefinition 将

bean定义转为RootBeanDifination

    2.7>:检查bean的依赖(bean加载顺序的依赖)

   2.8>:org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton根据

scope 的添加来创建bean

3>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBean创建

bean的方法

4>org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean 真

正的创建bean的逻辑

  4.1>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance

调用构造函数创建对象

4.2>:判断是否需要提早暴露对象(mbd.isSingleton() && this.allowCircularReferences && isSingletonCurrentlyInCreation(beanName));

4.3>org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingletonFactory

暴露对象解决循环依赖

4.4>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

给创建的bean进行赋值

4.5>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean对

bean进行初始化

4.5.1>:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods

调用XXAware接口

4.5.2>applyBeanPostProcessorsBeforeInitialization 调用bean的后置处理器进行对处理

4.5.3>org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods

对象的初始化方法

4.5.3.1>:org.springframework.beans.factory.InitializingBean#afterPropertiesSet 调用

InitializingBean的方法

4.5.3.2>:String initMethodName = mbd.getInitMethodName(); 自定义的初始化方法

5>:org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#addSingleton 把创建好的实

例化好的bean加载缓存中

6>:org.springframework.beans.factory.support.AbstractBeanFactory#getObjectForBeanInstance对创建的

bean进行后续的加工

你可能感兴趣的:(spring bean的实例化过程)