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主要是在类初始化之前,跟之后处理相应的事。

  • 相关阅读:
    PHP保留小数的相关方法
    ASP.NET Core MVC 之过滤器(Filter)
    ASP.NET Core MVC 之控制器(Controller)
    ASP.NET Core MVC 之视图组件(View Component)
    ASP.NET Core MVC 之局部视图(Partial Views)
    标签助手(TagHelper)
    ASP.NET Core MVC 之布局(Layout)
    ASP.NET Core MVC 之视图(Views)
    ASP.NET Core MVC 之模型(Model)
    九卷读书:淘宝从小到大的发展 -重读《淘宝技术这十年》
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/9823244.html
Copyright © 2011-2022 走看看