赞
踩
目录
在这篇文章中,将会介绍bean的后置处理器,由于这个涉及到AOP的思想,这里不进行过多的深入,也就是不讲原理(后面文章会手写源码),这里只介绍后置处理器如何使用。
在spring中,后置处理器会在bean初始化化之前和初始化之后进行调用,做相应的处理,我们可以在后置处理器中对bean进行统一的管理和操作
我们要使用后置处理器,首先需要实现BeanPoatProcessor这个接口,下面我们创建一个类来实现这个接口。
在IDEA中,按ctrl+i,重写2个方法
postProcessBeforeInitialization和 postProcessAfterInitialization这2个方法,一个是在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的基础功能都进行实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。