前言
在这篇文章中,将会介绍bean的后置处理器,由于这个涉及到AOP的思想,这里不进行过多的深入,也就是不讲原理(后面文章会手写源码),这里只介绍后置处理器如何使用。
基本说明
在spring中,后置处理器会在bean初始化化之前和初始化之后进行调用,做相应的处理,我们可以在后置处理器中对bean进行统一的管理和操作
BeanPostProcessor的基本使用
我们要使用后置处理器,首先需要实现BeanPoatProcessor这个接口,下面我们创建一个类来实现这个接口。
在IDEA中,按ctrl+i,重写2个方法
postProcessBeforeInitialization和 postProcessAfterInitialization这2个方法,一个是在bean的初始化方法之前调用,一个是在bean初始化方法之后调用,它们的参数都是一样的,下面进行介绍
参数介绍
- 第一个参数 Object:表示我们配置的bean对象
- 第二个参数 String:就是我们配置bean时指定的名称
- 返回值 Object:这个就是我们对bean处理后要进行返回的bean,返回后,spring容器的中的bean就是我们这里返回的bean
使用
创建好之后要进行配置才能生效,这个很简单,只需要将我们创建的后置处理器加入到spring容器即可,就像正常的bean那样配置就行
注意事项
后置处理器会对所有的bean都生效,使用时需要注意,也就是所有bean创建前和创建后都会调用我们配置的后置处理器的对应方法
实例应用
我们创建一个People类,该类有一个gender属性,一个describe属性,要求就是当我们创建时bean时,如果gender是男,describe就是这是一个男生,否则describe就是这是一个女生。
首先创建People类
public class People {
private String gender;
private String describe;
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
@Override
public String toString() {
return "People{" +
"gender='" + gender + '\'' +
", describe='" + describe + '\'' +
'}';
}
}
然后在xml中配置2个People,一个性别男,一个性别女
<bean class="com.ttpfx.spring.practice.People" id="people01">
<property name="gender" value="男"/>
</bean>
<bean class="com.ttpfx.spring.practice.People" id="people02">
<property name="gender" value="女"/>
</bean>
下一步就是创建我们的后置处理器
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//在bean创建好之后修改bean的内容
//首先判断bean是不是一个People
if (bean.getClass() == People.class) {
//判断是不是男性
if ("男".equals(((People) bean).getGender())) {
//进行属性的设置
((People) bean).setDescribe("这时一个男生");
}else {
((People) bean).setDescribe("这时一个女生");
}
}
return bean;
}
}
将我们创建的后置处理器配置到xml文件中
<bean class="com.ttpfx.spring.practice.MyBeanPostProcessor" id="beanPostProcessor"/>
创建测试方法进行测试
@Test
public void t2(){
//创建spring容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans02.xml");
//获取xml中配置的2个people
People people01 = ioc.getBean("people01", People.class);
People people02 = ioc.getBean("people02", People.class);
//输出信息
System.out.println(people01);
System.out.println(people02);
}
控制台输出
总结
后置处理器的使用并不难,甚至可以说是十分简单,但是要了解原理的话现在还有点早,这个得要AOP学了再说,后面的文章也会自己手写一个简单的spring,里面会将ioc以及aop的基础功能都进行实现