吃透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初始化,关于前面两步 “实例化” 和 “填充属性” 两步,请参考: