Spring 后置处理器

Spring 后置处理器【1】

Spring 后置处理器【1】 简单介绍

一句话:bean 在初始化前或初始化后的瞬间,我自己添加一些业务逻辑

bean 后置处理器类的内容

简单代码
package com.hspedu.spring.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * @Author:PigBrother
 * @Date:2022/9/22
 * @Description:ToDo
 */

public class MyBeanPostProcessor implements BeanPostProcessor {
    /**
     * Before : 说明在bean 初始化前被调用
     * @param bean 在ioc 容器中, 我配置的bean 对象
     * @param beanName 在ioc 容器中,bean 的 id
     * @return bean 返回处理后的bean 对象
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 写业务逻辑:在bean 初始化前,修改其一些属性
        System.out.println("postProcessBeforeInitialization() 方法被调用");
        System.out.println("bean = " + bean);
        System.out.println("beanName = " + beanName);
        return bean;
    }

    /**
     * after : 说明在bean 初始化后被调用
     * @param bean 在ioc 容器中, 我配置的bean 对象
     * @param beanName 在ioc 容器中,bean 的 id
     * @return bean 返回处理后的bean 对象
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // 写业务逻辑:在bean 初始化前,修改其一些属性
        System.out.println("postProcessAfterInitialization() 方法被调用");
        System.out.println("bean = " + bean);
        System.out.println("beanName = " + beanName);
        return bean;
    }
}

代码解读

  • 实现 BeanPostProcessor 接口
  • postProcessBeforeInitialization 和 postProcessAfterInitialization 两个方法
  • 在两个方法中写业务逻辑

容器配置文件(即xml 文件)

测试代码

测试代码
  @Test
    public void beanProcessorTest() {
       ApplicationContext ioc = new ClassPathXmlApplicationContext("beans02.xml");
        House            house = ioc.getBean("house", House.class);
        System.out.println(house);

        // 关闭ioc 容器
        ((ClassPathXmlApplicationContext)ioc).close();

    }

测试结果

Spring 后置处理器的简单应用

将容器内的所有bean的某一个属性的值统一改为另一个值

有 AOP 的一点影子了

将大豪宅改成香港豪宅
package com.hspedu.spring.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * @Author:PigBrother
 * @Date:2022/9/22
 * @Description:ToDo
 */

public class MyBeanPostProcessor implements BeanPostProcessor {
    /**
     * Before : 说明在bean 初始化前被调用
     * @param bean 在ioc 容器中, 我配置的bean 对象
     * @param beanName 在ioc 容器中,bean 的 id
     * @return bean 返回处理后的bean 对象
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 写业务逻辑:在bean 初始化前,修改其一些属性
        System.out.println("postProcessBeforeInitialization() 方法被调用; 将所有豪宅改成香港豪宅");
        if (bean instanceof House) {
            House house = (House) bean;
            house.setName("香港豪宅");
        }
        return bean;
    }

    /**
     * after : 说明在bean 初始化后被调用
     * @param bean 在ioc 容器中, 我配置的bean 对象
     * @param beanName 在ioc 容器中,bean 的 id
     * @return bean 返回处理后的bean 对象
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        // 写业务逻辑:在bean 初始化前,修改其一些属性
        System.out.println("postProcessAfterInitialization() 方法被调用");
        System.out.println("bean = " + bean);
        System.out.println("beanName = " + beanName);
        return bean;
    }
}

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Spring 后置处理器