• 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;
        }
    }
    
    
  • 相关阅读:
    基于django和爬虫的影视评价分析系统
    进程属性/进程状态
    C语言编程规范学习笔记和总结
    Maven配置私有仓库
    【Flink 实战系列】Flink on yarn 为什么 Allocated CPU VCores 显示不正确?
    突破编程_C++_面试(STL 编程 list)
    在C#中进行单元测试
    Hbase TimeStamp的妙用
    微信小程序-微信授权登录
    你真的了解token续期嘛?
  • 原文地址:https://www.cnblogs.com/PigBrotherLove/p/16718015.html