1.BeanPostProcessor原理
先说,bean的后置处理器BeanPostProcessor接口中两个方法:
- postProcessBeforeInitialization:在初始化之前工作
- postProcessAfterInitialization:在初始化之后工作
BeanPostProcessor原理
- populateBean(beanName, mbd, instanceWrapper);//给bean进行属性赋值
- 调用initializeBean方法,执行后置处理器和指定的初始化方法。(详细过程见下面源码)
- 后置处理器BeanPostProcessor执行过程是,遍历得到容器中所有的BeanPostProcessor;挨个执行beforeInitialization,一但返回null,跳出for循环,不会执行后面的BeanPostProcessor.postProcessorsBeforeInitialization
核心执行方法initializeBean:
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean
initializeBean
{
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
invokeInitMethods(beanName, wrappedBean, mbd);执行自定义初始化
applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
}
/**
* Initialize the given bean instance, applying factory callbacks
* as well as init methods and bean post processors.
* <p>Called from {@link #createBean} for traditionally defined beans,
* and from {@link #initi