BeanPostProcessor(接口):bean的后置处理器
在bean初始化前后进行一些处理工作
【1】、BeanPostProcessor#postProcessBeforeInitialization 在初始化之前
Apply this BeanPostProcessor to the given new bean instance beforeany bean initialization callbacks (like InitializingBean's {@code afterPropertiesSet} or a custom init-method).
在任何bean初始化回调(比如initializengbean的{@code afterPropertiesSet}或自定义init方法)之前,将这个BeanPostProcessor应用于给定的新bean实例。
【2】、BeanPostProcessor#postProcessAfterInitialization 在初始化之后
Apply this BeanPostProcessor to the given new bean instance after any bean initialization callbacks (like InitializingBean's {@code afterPropertiesSet}
在任何bean初始化回调(例如InitializingBean的{@code afterPropertiesSet})之后,将此BeanPostProcessor应用于给定的新bean实例。
BeanPostProcessor#postProcessBeforeInitialization
初始化
对象创建好,并赋值好,调用初始化方法....
BeanPostProcessor#postProcessAfterInitialization
//后置处理器,初始化前后进行处理工作
//将后置处理器加入到容器中
@Component
public class MyPostFactoryBean implements BeanPostProcessor{
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// TODO Auto-generated method stub
System.out.println("postProcessBeforeInitialization=="+beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// TODO Auto-generated method stub
System.out.println("postProcessAfterInitialization=="+beanName);
return bean;
}
}
原理:
【先】populateBean(beanName,mbd,instanceWrapper);给bean属性赋值的
【再】initializeBean {
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName)
invokeInitMethods(beanName, wrappedBean, mbd);
applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
}
bean的创建过程:
1、refresh()
2、finishBeanFactoryInitializtion();
3、beanFactroy.preInstantiateSinletons()
4、getBean()
5、doGetBean()
6、getSinleton()
7、createBean()
8、doGetBean()
9、InitializeBean()
10、applyBeanPostProcessorsBeforeInitialization()
11、invokeInitMethods()