首页
编程语言

分类

当前位置: 云海天教程网 > 技术新闻 > 编程语言 >正文

Spring 后置处理器【1】

更新时间:2022-09-22  作者:佚名   来源: 网络转载

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 文件)

Spring 后置处理器【1】

测试代码

测试代码
  @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 后置处理器【1】

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;
    }
}

上一篇:Javascript实现拖拽排序的代码【java面试】【Js框架】 下一篇:JAVA中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器
小编推荐
快速导航更多>>
JavaScript 教程 HTML5 教程 CSS3 教程 jQuery 教程 Vue.js 教程 Node.js 教程 SQL 教程 C 教程 PHP 教程 Linux 教程 Docker 教程 Nginx 教程 Python 教程 Java 教程

云海天教程网 版权所有

 陕公网安备 61050202000585号

陕ICP备14013131号-3