两种后处理器
Bean后处理器
这种后处理器会对容器中的Bean进行后处理,对Bean进行额外加强
Bean后处理器会在Bean实例创建成功之后,对Bean实例进行进一步的增强处理
必须实现BeanPostProcessor接口,该接口主要包含如下两个方法:
- Object postProcessBeforeInitization(Object bean,String name) throws beansException
- Object postProcessAfterInitization(Object bean,String name) throws beansException
第一个参数bean为系统即将进行后处理的Bean实例,第二个参数是该Bean的配置id
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* 对容器中的Bean实例进行后处理
* @param bean需要进行后处理的原bean实例
* @param beanName 需要进行后处理的Bean的配置id
* @return 返回后处理完成的Bean
*/
public Object postProcessBeforeInitization(Object bean,String beanName){
System.out.println("Bean后处理器在初始化之前对"+beanname+"进行增强处理");
return bean;
}
public Object postProcessAfterInitization(Object bean,String beanName){
System.out.println("Bean后处理器在初始化之后对"+beanname+"进行增强处理");
return bean;
}
}
容器中一旦注册了Bean后处理器,Bean后处理器就会自动启动,在容器中每个Bean创建时自动工作,加入Bean后处理器需要完成的工作。
回调时机
Bean后处理器一般用于生成Proxy,如Spring提供的两个常用的后处理器BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator
容器后处理器
这种后处理器对IoC容器进行后处理,用于增强容器功能。一般地,Bean后处理器用于处理容器中的所有Bean实例,而容器后处理器则负责处理容器本身。
必须实现BeanFactoryPostProcessor接口,实现方法
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
若ApplicationContext作为容器,可以自动检测到容器中的容器后处理器,并且自动注册容器后处理器,但是若使用BeanFactory作为Spring容器,则必须手动调用该容器后处理器来处理BeanFactory容器。
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
/**
* 重写该方法,对spring进行后处理
* @param beanFactory spring容器本身
*/
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
throws BeansException{
System.out.println("程序对Spring所做的BeanFactory的初始化没有改变...");
System.out.println("Spring容器是"+beanFactory);
}
}
Spring已提供如下几个常用的容器后处理器:
PropertyPlaceholderConfigurer:负责读取properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的数据;