spring中Bean后置处理器实现总结

时间:2021-09-21 03:43:57

BeanPostProcessor接口 bean的后置处理器

实现功能主要是 可以在bean初始化之前和之后做增强处理。

自定义MyBeanProcessor实现BeanPostProcessor接口,重写里面的postProcessBeforeInitialization和postProcessAfterInitialization方法,这里两个方法的主要是用来bean初始化(init方法)之前和之后做增强处理。

/**
 * @author liujian
 * @date 2018/1/9
 */
public class MyBeanProcessor implements BeanPostProcessor{
    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
        System.out.println("初始化之前做处理");
        //bean初始化之前做处理的方法
        if(s.equals("test")){
           HelloWorld helloWorld=(HelloWorld)o;
           helloWorld.setMessage("helloworld 处理后");
           return helloWorld;
        }

        return o;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        System.out.println("初始化之后做处理");
        return o;
    }
}

将自定义的MyBeanProcessor 添加到spring 容器中

<bean id="myBeanProcessor" class="com.spring.demo.MyBeanProcessor">

自定义一个实体类HelloWorld,并添加到spring容器中

/**
 * @author liujian
 * @date 2018/1/8
 */
public class HelloWorld {

    private String message;

    public void getMessage(){
        System.out.println("message is "+message);
    }

    public void setMessage(String message){
        this.message=message;
    }

    public HelloWorld() {
    }
    //初始化方法
    public void init(){
        System.out.println("bean 初始化方法");
    }
    //销毁方法
    public void destory(){
        System.out.println("bean 销毁方法");
    }
}

bean.xml文件中 配置helloworld的bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--通过构造器方法创建bean,定义初始化方法initmethod 和销毁方法-->
    <bean id="test" class="com.spring.demo.HelloWorld" init-method="init" destroy-method="destory">
        <property name="message" value="hello world 1111"></property>
     </bean>
    <!--自定义bean的后置处理器-->
    <bean class="com.spring.demo.MyBeanProcessor"/>
</beans>

测试工具类:

/**
 * @author liujian
 * @date 2018/1/8
 */
public class MainApp {

    public static void main(String []args){
    /*    ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld obj=(HelloWorld) context.getBean("helloWorld");
        obj.getMessage();
        XmlBeanFactory xmlBeanFactory=new XmlBeanFactory(new ClassPathResource("beans.xml"));
        HelloWorld obj1=(HelloWorld) xmlBeanFactory.getBean("helloWorld");
        obj1.getMessage();*/
        AbstractApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld objA=(HelloWorld) context.getBean("test");
        objA.getMessage();
        context.registerShutdownHook();
    }
}

输出结果:

spring中Bean后置处理器实现总结