上来先砸一张图!
Bean的生命周期只有四个
实例化Instantiation、属性赋值Populate、初始化Initialization、销毁Destruction
都在doCreate()方法中分别调用createBeanInstatiation()、populateBean()、initializationBean()。
源码如下:
// 忽略了无关代码
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);
}
}
可以自己实现的两个生命周期接口
initializationBean() 对应生命周期初始化阶段
DisposeableBean() 对应生命周期销毁阶段