zoukankan      html  css  js  c++  java
  • 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方法:初始化后所需要做的处理

  • 相关阅读:
    Android数据存储之Application
    contentOffset、contentSize和contentInset
    block
    IOS中的深拷贝和浅拷贝
    手势图的设计原理(2)拖拽、捏合、轻扫、旋转
    深浅拷贝的应用-copy、mutableCopy
    手势图的设计原理(1)建立、开始、移动、结束、点击、长按
    UIView
    MVC-Model
    UIPageControl页面控制的控件
  • 原文地址:https://www.cnblogs.com/lyh233/p/12441634.html
Copyright © 2011-2022 走看看