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()

BeanPostProcessor详解
本文详细介绍了Spring框架中BeanPostProcessor接口的功能与实现原理。包括如何在bean初始化前后进行处理工作,以及具体的使用示例。
151

被折叠的 条评论
为什么被折叠?



