zoukankan      html  css  js  c++  java
  • (II)第九节:bean 的后置处理器

    一、概念

      bean 的 后置处理器允许在调用 初始化方法前后 对 bean 进行额外的处理。
      注意:bean 的后置处理器会对 IOC 容器里的所有的 bean 实例逐一进行处理,而非单一实例!

    二、实现后置处理器

      bean 的后置处理器需要实现接口:org.springframework.beans.factory.config.BeanPostProcessor
      这个接口中有两个方法需要实现,在初始化方法被调用前后, Spring 将把每个 bean 实例分别传递给上面接口中的两个方法。
     
      实现bean 的后置处理器:
    /**
     *  1、编写后置处理器的实现类
     *  2、将后置处理器注册到【配置文件中】
     */
    public class MyBeanPostProcessor implements BeanPostProcessor {
    
        /**
         * postProcessBeforeInitialization
         *  初始化之前调用
         *
         * Object bean:将要初始化的bean
         * String beanName:就是在 xml 中配置的 id
         *
         * @param bean
         * @param beanName
         * @return
         * @throws BeansException
         */
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessBeforeInitialization" + "【"+ beanName +"】" + "bean将要调用初始化方法了。。。这个bean是这样的:" + "【"+ bean +"】" );
            //返回传入的 bean
            return bean;
        }
    
        /**
         *  postProcessAfterInitialization
         * 初始化方法之后调用
         *
         * @param bean
         * @param beanName
         * @return
         * @throws BeansException
         */
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessAfterInitialization" + "【"+ beanName +"】" + "bean初始化方法调用完毕了。。。");
            //初始化之后返回的 bean,返回的是什么,容器中保存的就是什么
            return bean;
        }
    }
      配置:
        <!--
            Spring 有一个接口:后置处理器,可以在 bean 的初始化前后调用方法
        -->
        <bean id="myBeanPostProcessor" class="com.njf.spring.bean.MyBeanPostProcessor"></bean>
     
      测试代码:
        /**
         * 后置处理器:
         *
         *  (容器启动)构造器 —>后置处理器before方法 —> 初始化方法 —> 后置处理器的after方法
         *   无论bean是否有初始化方法;后置处理器都会工作,默认其有,还会继续工作
         */
        @Test
        public void test9() {
            ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext("ioc3.xml");
    
            Object bean = ioc.getBean("book001");
            System.out.println(bean);
    
            ioc.close();
        }
     
     

    三、添加 bean 的后置处理器后的 bean 的生命周期

            ① 通过构造器或工厂方法创建 bean 实例
            ② 为 bean的属性设置值和对其他 bean 的引用;
            ③ 将 bean 实例传递给 bean 后置处理器的 postProcessAfterInitialization() 方法
            ④ 调用 bean 的初始化方法
            ⑤ 将 bean 实例传递给 bean 后置处理器的 postProcessBeforeInitialization() 方法
            ⑥ 使用操作 bean;
            ⑦ 当容器关闭时调用 bean 的销毁方法
     
  • 相关阅读:
    [转]vim 退格键(backspace)不能用
    centos出现“FirewallD is not running”怎么办
    cordova 实现拨打电话-只需两步(H5)
    腾讯云上运行java程序过程
    centos7 安装php
    centos 7 PostgreSQL一些简单问题以及解决办法
    centos 安装 java
    git push报错error: failed to push some refs to 'git@github.com:
    linux install beanstalkd
    centos7 执行一个数据库脚本创建项目中的数据库
  • 原文地址:https://www.cnblogs.com/niujifei/p/15417125.html
Copyright © 2011-2022 走看看