跳到主要内容

吃透Spring源码(十二):Spring initializeBean源码分析

一,initializeBean方法概述

Spring中的initializeBean()方法是doCreateBean方法三部曲的最后一步,完成initializeBean()则整个bean的创建过程才算完成,我们来看一下bean的创建过程doCreateBean()方法中三部曲:实例化(createBeanInstance),填充属性(populateBean),初始化(initializeBean)。

public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory
implements AutowireCapableBeanFactory {


protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
throws BeanCreationException {



// 省略部分代码....

// 第一步:实例化bean
instanceWrapper = createBeanInstance(beanName, mbd, args);

// 为避免后期循环依赖,提前曝露ObjectFactory到第三级缓存中。
addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));

// 第二步:填充属性
populateBean(beanName, mbd, instanceWrapper);

// 第三步:执行初始化逻辑
exposedObject = initializeBean(beanName, exposedObject, mbd);

}
}

本文主要分析是initializeBean初始化,关于前面两步 “实例化” 和 “填充属性” 两步,请参考:

Spring实例化(createBeanInstance)源码解析