生命周期(五)--BeanPostProcessor原理

我们在MyBeanPostProcessor.postProcessBeforeInitialization方法中打上断点debug模式下运行可以看到整个容器创建,初始化过程
在doCreateBean方法中看到调用initializeBean,进入调用方法,可以看到代码初始化方法invokeInitMethods前后调用了applyBeanPostProcessorsBeforeInitialization以及applyBeanPostProcessorsAfterInitialization
生命周期(五)--BeanPostProcessor原理
点击进入applyBeanPostProcessorsBeforeInitialization方法,获取到List<BeanPostProcessor>,循环执行初始化前操作postProcessBeforeInitialization
生命周期(五)--BeanPostProcessor原理
而之前创建Bean方法doCreateBean中初始化initializeBean之前,可以看到调用populateBean
,这个方法就是给bean赋值的,所以说在创建bean并且属性赋值完成后,进而执行初始化方法生命周期(五)--BeanPostProcessor原理生命周期(五)--BeanPostProcessor原理
总结:
BeanPostProcessor原理
populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值
initializeBean
{
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
invokeInitMethods(beanName, wrappedBean, mbd);执行自定义初始化
applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
}

applyBeanPostProcessorsBeforeInitialization及applyBeanPostProcessorsAfterInitialization中
遍历得到容器中所有的BeanPostProcessor;挨个执行beforeInitialization,
一但返回null,跳出for循环,不会执行后面的BeanPostProcessor.postProcessorsBeforeInitialization