zoukankan      html  css  js  c++  java
  • Spring源码窥探之:BeanPostProcessor

    Spring的Bean后置处理器

    1. 实体类

    /**
     * @author 70KG
     * @Title: Train
     * @Description:
     * @date 2018/7/23下午11:31
     * @From www.nmyswls.com
     */
    public class Train {
    
        public Train() {
            System.out.println("Train构造方法执行。。。。。。");
        }
    
    
        public void init() {
            System.out.println("Train的init方法执行。。。。。。");
        }
    
        public void destroy() {
            System.out.println("Train的destroy方法执行。。。。。。");
        }
    
    }

    2. 配置类

    ⚠️加上对实现类的扫描

    /**
     * @author 70KG
     * @Title: config
     * @Description:
     * @date 2018/7/23下午11:31
     * @From www.nmyswls.com
     */
    @Configuration
    @ComponentScan("com.nmys.story.springCore.springioc.beanpostprocessor_")
    public class Config01 {
    
        @Bean(initMethod = "init",destroyMethod = "destroy")
        public Train train(){
            return new Train();
        }
    
    }

    3. BeanPostProcessor的实现类

    ⚠️加上@Component注解,目的为了让spring来管理这个实现类

    /**
     * @author 70KG
     * @Title: BeanPostProcessorImpl
     * @Description: bean的后置处理器
     * @date 2018/7/23下午11:31
     * @From www.nmyswls.com
     */
    @Component
    public class BeanPostProcessorImpl implements BeanPostProcessor {
    
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            // 返回一个传过来的对象
            // 在初始化方法调用之前进行后置处理工作
            // 什么时候调用呢?在init-method方法之前就调用了
            System.out.println("postProcessBeforeInitialization======" + beanName + "======" + bean);
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessAfterInitialization======" + beanName + "======" + bean);
            return bean;
        }
    
    }

    4. 测试

    /**
     * @author 70KG
     * @Title: FutureTaskTest
     * @Description:
     * @date 2018/7/23下午11:31
     * @From www.nmyswls.com
     */
    public class Test01 {
    
        @Test
        public void test() {
    
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Config01.class);
    
            ac.close();
    
        }
    
    }

    5. 结果

    Train构造方法执行。。。。。。
    postProcessBeforeInitialization======train======com.nmys.story.springCore.springioc.beanpostprocessor_.Train@3b69e7d1
    Train的init方法执行。。。。。。
    postProcessAfterInitialization======train======com.nmys.story.springCore.springioc.beanpostprocessor_.Train@3b69e7d1
    Train的destroy方法执行。。。。。。

    BeanPostProcessor主要是在类初始化之前,跟之后处理相应的事。

  • 相关阅读:
    deepin linux手工更新系统
    redis使用redis-cli查看所有的keys及清空所有的数据
    使用浏览器地址栏调用CXF Webservice的写法
    windows 80端口被占用
    How to install 64-bit Google Chrome 28+ on 64-bit RHEL/CentOS 6 or 7
    CAS 单点登录流程
    Restful是什么,SOAP Webservice和RESTful Webservice
    SpringMVC中的@PathVariable
    VMWare安装苹果操作系统OS X
    eclipse(adt-bundle)的Android SDK Manager下载不了谷歌的东西怎么办?
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/9823244.html
Copyright © 2011-2022 走看看