[spring学习]5、bean的后置处理器(BeanPostProcessor)

目录

前言

基本说明

BeanPostProcessor的基本使用

实例应用

总结


前言

        在这篇文章中,将会介绍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的基础功能都进行实现