栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第七篇 再读Spring之 PostProcessor

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第七篇 再读Spring之 PostProcessor


文章目录
  • 前言
  • 一、PostProcessor分类
  • 二、BeanFactoryPostProcessor
    • 1. 如何注册
    • 2.何时使用
    • 3.相关类
  • 三、BeanPostProcessor
    • 1. 如何注册
    • 2.何时使用
    • 3.相关类
  • 总结


前言

今天想聊聊Spring中的PostProcessor,毕竟作为一种被广泛使用的扩展方式,在spring生态下的其他组件中非常常见。


一、PostProcessor分类

个人理解存在2个大类,BeanFactoryPostProcessor和BeanPostProcessor。简单理解,就是在BeanFactory和Bean两个颗粒度上的PostProcessor。接下来,针对每一类的PostProcessor怎么注册,怎么使用,以及典型应用做进一步的讨论。

二、BeanFactoryPostProcessor 1. 如何注册

首先,BeanFactoryPostProcessor最终作用在BeanFactory上,这意味着应用BeanFactoryPostProcessor之前BeanFactory得确实存在。从OOP的角度,前者不关心后者是具体的哪一个,后者根本不知道前者的存在。因此,BeanFactoryPostProcessor是通过ApplicationContext的addBeanFactoryPostprocessor添加,最终保存在属性List beanFactoryPostProcessors。

2.何时使用

ApplicationContext在refresh阶段,由invokeBeanFactoryPostProcessors完成apply。

3.相关类
  1. CustomScopeConfigure: 完成自定义scope实现的注册,为后续的Bean创建做准备;

  2. BeanDefinitionRegistryPostProcessor:在BeanDefinition完成注册后做后处理,比如子类ConfigurationClassPostProcessor对@Configuration注解相关增强处理;

三、BeanPostProcessor 1. 如何注册

BeanPostProcessor最终作用在Bean上,这意味着每次获取Bean都需要做必要的PostProcessor。因此,BeanPostProcessor注册在BeanFactory中,通过addBeanPostProcessor添加,最终保存在属性List beanPostProcessors。

2.何时使用

Spring中管理了整个Bean的生命周期从实例化,初始化到对象消亡。实际上,BeanPostProcessor名字有点儿忽悠人,因为有的PostProcessor甚至直接影响Bean的实例化。

3.相关类

InstantiationAwareBeanPostProcessor接口定义内容如下

  1. 实例化前处理postProcessBeforeInstantiation
  2. 实例化后处理postProcessAfterInstantiation
  3. 初始化之前对属性值的处理postProcessProperties

这里需要注意,如果postProcessBeforeInstantiation返回值非空,那么将阻断Spring的实例创建流程,而是进入后续的初始化阶段。如果目标bean需要通过工厂方法完成创建,那么该方法不会被apply。


总结

以上就是今天要讲的内容,今天我们聊了聊Spring中的PostProcessor,其中包含BeanPostProcessor和BeanFactoryPostProcessor。对于BeanPostProcessor中的方法postProcessBeforeInstantiation,在使用过程中还请注意,避免踩坑。感谢你的阅读,如果本文对你有帮助,烦请让我知晓。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号