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方法:初始化后所需要做的处理

  • 相关阅读:
    腾讯之困,QQ与微信各有各的烦恼
    Attribute(一)——提前定义特性
    假设有来生
    codeforces248(div1) B Nanami's Digital Board
    驳斥苹果“诊断后门论”,声援扎德尔斯基
    python批量下载色影无忌和蜂鸟的图片 爬虫小应用
    建筑建模学习笔记2——3DMax房屋框架建模
    【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战
    javaObject类
    java基本类型和String之间的转换
  • 原文地址:https://www.cnblogs.com/lyh233/p/12441634.html
Copyright © 2011-2022 走看看