Spring新手学习笔记(二)后处理器与AOP_Java_第七城市
1.后处理器
后处理器是对IOC容器功能的扩展。按我的理解,扩展的原理是在某动作结束后再次调用指定的方法进行扩展处理。有点类似于AOP。
后处理器分两种:Bean后处理器和容器后处理器。
1.1 Bean后处理器
Bean后处理器会在Bean实例化结束后(注意,该实例化应该是指Bean类的实例化,还没有进行Spring中的注入等操作,并不是Spring最终返回的Bean),对其进行近一步的增强处理,例如返回一个Bean的代理类。
Bean后处理器需要实现BeanPostProcessor
接口,该接口包含的postProcessBeforeInitialization
,postProcessAfterInitialization
分别在Bean初始化之前和之后回调。如上图,增强处理与init-method
,InitializingBean
,destory-method
,DisposableBean
的执行顺序,增强处理永远在最外围的。
下面给出Bean后处理器的Demo:
首先实现创建一个实现BeanPostProcessor
的后处理器类
/**
* Bean后处理器Demo类,该处理类会对容器里面的所有Bean进行后处理
* @author wangsz
*/
public class BeanPostProc implements BeanPostProcessor{
/**
* 在Bean初始化后,对容器中的bean进行后处理,返回处理后的bean
*/
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean后处理器在["+beanName+"]初始化后对其进行增强处理");
if(bean instanceof Person){
((Person) bean).setName("akq");
}
//该bean可以与旧bean截然不同,如返回一个该Bean的代理类
return bean;
}
/**
* 在Bean初始化前,对容器中的bean进行后处理,返回处理后的bean
*/
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("bean后处理器在["+beanName+"]初始化前对其进行增强处理");
//该bean可以与旧bean截然不同
return bean;
}
}
然后在Spring配置文件中加上这个Bean。这样,该后处理类就会对容器里面的所有Bean进行后处理。