BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调BeanPostProcessor中定义的两BeanPostProcessor.postProcessBeforeInitialization 以及 BeanPostProcessor.postProcessAfterInitialization

* BeanPostProcessor.postProcessBeforeInitialization
* 初始化:
* 对象创建完成,并赋值好,调用初始化方法。。。
* BeanPostProcessor.postProcessAfterInitialization
* 销毁:
* 单实例:容器关闭的时候
* 多实例:容器不会管理这个bean;容器不会调用销毁方法;
*
* 遍历得到容器中所有的BeanPostProcessor;挨个执行beforeInitialization,
* 一但返回null,跳出for循环,不会执行后面的BeanPostProcessor.postProcessorsBeforeInitialization

* BeanPostProcessor原理
* populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值
* initializeBean
* {
* applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
* invokeInitMethods(beanName, wrappedBean, mbd);执行自定义初始化
* applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);

/*
后置处理器,初始化前后进行处理工作
将后置处理器加入到容器中*/
public class MyBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("postProcessBeforeInitialization.."+bean+".."+beanName);return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("postProcessAfterInitialization.."+bean+".."+beanName);return bean;}
}

public class App {public static void main(String[] args) {AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(Config1.class);String[] beanDefinitionNames = context.getBeanDefinitionNames();for (String n:beanDefinitionNames){System.out.println(n);}context.close();}
}

运行结果:

dog construct......
postProcessBeforeInitialization..com.yuan.beancycle.model.Dog@5f8e8a9d..com.yuan.beancycle.model.Dog
dog init @PostConstruct .....
postProcessAfterInitialization..com.yuan.beancycle.model.Dog@5f8e8a9d..com.yuan.beancycle.model.Dog
16:04:41.709 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'car'
Car Constructor.....
postProcessBeforeInitialization..com.yuan.beancycle.model.Car@79207381..car
Car init .....
postProcessAfterInitialization..com.yuan.beancycle.model.Car@79207381..car
16:04:42.585 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'cat'
Cat 构造方法 。。。。。。
postProcessBeforeInitialization..com.yuan.beancycle.model.Cat@782859e..cat
Cat 初始化方法 。。。。。。
postProcessAfterInitialization..com.yuan.beancycle.model.Cat@782859e..cat
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
config1
com.yuan.beancycle.model.Dog
com.yuan.beancycle.model.MyBeanPostProcessor
car
cat
16:04:43.236 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@544a2ea6, started on Mon Aug 05 15:52:34 CST 2019
Cat 销毁方法
Car destory .....
dog destory @PreDestroy .....

转载于:https://www.cnblogs.com/mingyuan1031/p/11304196.html

使用BeanPostProcessor为bean做后置处理相关推荐

  1. 通过Spring的BeanPostProcessor的 bean的后置处理器会拦截所有bean创建过程

    postProcessBeforeInitialization 在init方法之前调用 postProcessAfterInitialization 在init方法之后调用 package com.C ...

  2. Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等...

    实验1:配置通过静态工厂方法创建的bean  [通过静态方法提供实例对象,工厂类本身不需要实例化!] 1.创建静态工厂类 public class StaticFactory {private sta ...

  3. Spring 详解Bean的后置处理器

    Bean的后置处理器详解: Spring当中的后置处理器是Spring体用的一个扩展点,开发者只要去实现,Spring当中的BeanPostProcessor接口,那么就能插手SpringBean实例 ...

  4. 实验10:创建带有生命周期方法的bean ||实验11:测试bean的后置处理器

    实验10:创建带有生命周期方法的bean 实验11:测试bean的后置处理器 MyBeanPostProcessor.java package com.atguigu.bean;import org. ...

  5. Spring中Bean的后置处理器

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-post-processors.html: Bean后置处理器 BeanPostProce ...

  6. 【定语从句练习题】分词结构做后置定语修饰前面的名词

    1. 改写训练 Most of the people who were hoping to see the President remained calm, but a minority of tho ...

  7. of介词短语作定语_介词短语做后置定语

    介词短语做后置定语 介词短语常常用作后置定语,在这类定语中有很多是用 of 引起的,能够表示: 1. 所相关系: the wealth of the nation. (国家的财富) 2. 特征: a  ...

  8. of介词短语作定语_介词短语做后置定语的用法

    [小编编语]今天求学网英语网小编教给同学们的是介词短语做后置定语的用法,一起来学习下吧! 介词短语常常用作后置定语,在这类定语中有许多是用of引起的,可以表示: 1. 所有关系:the wealth ...

  9. SringIOC中Bean的后置处理器

    Bean后置处理器 Spring提供的特殊的Bean 1. Bean后置处理器允许在调用初始化方法 即:bean节点init-method属性对应的方法的前后,对Bean进行额外的处理. 2.Bean ...

  10. AbstractAutowireCapableBeanFactory 类对容器生成的Bean 添加后置处理器

    BeanPostProcessor 后置处理器的调用发生在Spring IOC 容器完成对Bean 实例对象的创建和属性的依赖注入完成之后,在对Spring 依赖注入的源码分析过程中我们知道,当应用程 ...

最新文章

  1. Linux0.11小结
  2. 你想的到想不到的 javascript 应用小技巧方法
  3. what is ssao
  4. python爬虫程序自动结束-在linux下python爬虫进程发生异常时自动重启直至正常结束的方法...
  5. 怎么用Iometer测试存储性能
  6. TortoiseSVN 命令 (命令行执行工具)
  7. render vue 添加类_详解vue 动态加载并注册组件且通过 render动态创建该组件
  8. 解决表格里面使用text-overflow后依旧不能隐藏超出的文本
  9. 先有产品管理,后有产品经理
  10. 系统启动 之 Linux系统启动概述(1)
  11. javaweb获取客户端IP
  12. keil5 下载器配置
  13. 电子设备常见的音视频接口
  14. eslint 规则之 《Missing radix parameter》
  15. python基础读后感_《Python基础教程读书笔记》
  16. 微信营销吸粉秘籍之:360谈谈
  17. 【创新²】SERO超零协议项目进展双月报
  18. 2022年围绕着BI平台的成长
  19. 4-使用GitHub(Github Issue)及基本概念实战
  20. java memcached清除,手动清除memcached缓存

热门文章

  1. Matlab自带的曲线拟合程序
  2. jquery prop('checked', true)解决attr('checked', true)不能选中radio问题
  3. SQL查询-将列转换成字符串(for xml path)
  4. Openbox 3.3
  5. English Learning from research paper
  6. 说说看:如何把自己的导师培养成杰青?
  7. 问答知识图谱还缺少什么信息?
  8. 智能对话训练师进阶本领:复杂对话流程处理
  9. bert性能优化之——用另一种方式整合多头注意力
  10. 一文看尽预训练语言模型