Spring Bean的生命周期只有这四个阶段

本文内容纲要:

- 只有四个!

Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。

只有四个!

是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点,稍后会讲。

  1. 实例化 Instantiation
  2. 属性赋值 Populate
  3. 初始化 Initialization
  4. 销毁 Destruction

实例化 -> 属性赋值 -> 初始化 -> 销毁

主要逻辑都在doCreate()方法中,逻辑很清晰,就是顺序调用以下三个方法,这三个方法与三个生命周期阶段一一对应,非常重要,在后续扩展接口分析中也会涉及。

  1. createBeanInstance() -> 实例化
  2. populateBean() -> 属性赋值
  3. initializeBean() -> 初始化

源码如下,能证明实例化,属性赋值和初始化这三个生命周期的存在。关于本文的Spring源码都将忽略无关部分,便于理解:

/ 忽略了无关代码

protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)

throws BeanCreationException {

// Instantiate the bean.

BeanWrapper instanceWrapper = null;

if (instanceWrapper == null) {

// 实例化阶段!

instanceWrapper = createBeanInstance(beanName, mbd, args);

}

// Initialize the bean instance.

Object exposedObject = bean;

try {

// 属性赋值阶段!

populateBean(beanName, mbd, instanceWrapper);

// 初始化阶段!

exposedObject = initializeBean(beanName, exposedObject, mbd);

}

}

链接:https://www.jianshu.com/p/1dec08d290c1

本文内容总结:只有四个!,

原文链接:https://www.cnblogs.com/aitree/p/14499331.html

以上是 Spring Bean的生命周期只有这四个阶段 的全部内容, 来源链接: utcz.com/z/362467.html

回到顶部