• 10、spring注解学习(bean的生命周期)——BeanPostProcessor【接口】:bean的后置处理器


    1、创建Bird类并注入容器中

    @Component
    public class Bird {
        public Bird() {
            System.out.println("Bird的构造方法执行了");
        }
        
        //对象构造并属性赋值后执行
        @PostConstruct
        public void PostConstruct() {
            System.out.println("Bird的PostConstruct方法执行了");
        }
        
        @PreDestroy
        public void destroy() {
            System.out.println("Bird的销毁方法执行了");
        }
    }

    2、创建自定义bean的后置处理器并注入容器中

    /*
     * 后置处理器,初始化前后进行处理
     */
    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor {
        
        /*
         * 参数1为容器刚创建的bean,beanName为bean的名字
         */
        //初始化前所需要做的处理
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
            //返回的对象可以是原来初始化的bean,也可以是包装之后的bean
            return bean;
        }
        
        //初始化后所需要做的处理
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
            return bean;
        }
    
    }

    3、在spring配置类中配置扫描哪些包下的注解并注入容器

    /**
     * 测试bean的生命周期的配置
     */
    @Configuration
    @ComponentScan(value="com.atguigu")
    public class MainConfigOfLifeCycle {
    
    }

    4、创建测试方法进行测试

        /*
         * 测试自定义bean的后置处理器在bean初始化前后所做工作
         */
        @Test
        public void test04() {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
            applicationContext.close();
        }

    执行结果:

     

    得出结论:

        postProcessAfterInitialization方法:初始化前所需要做的处理
        postProcessBeforeInitialization方法:初始化后所需要做的处理

  • 相关阅读:
    Oracle数据库基础
    2016-08-08二期模拟考试
    易买网-登入
    常量接口模式
    反射
    Hhibernate延迟加载
    URL和URI的区别和联系
    Socket编程
    ArrayList如何实现线程安全
    移位运算符
  • 原文地址:https://www.cnblogs.com/lyh233/p/12441634.html
Copyright © 2020-2023  润新知