六 Spring 源码学习扩展功能 上篇( 四 )

orderedPostProcessors = new ArrayList<>(orderedPostProcessorNames.size()); for (String postProcessorName : orderedPostProcessorNames) { orderedPostProcessors.add(beanFactory.getBean(postProcessorName, BeanFactoryPostProcessor.class)); } sortPostProcessors(orderedPostProcessors, beanFactory); invokeBeanFactoryPostProcessors(orderedPostProcessors, beanFactory); // 最后执行的是普通的后处理器 List nonOrderedPostProcessors = new ArrayList<>(nonOrderedPostProcessorNames.size()); for (String postProcessorName : nonOrderedPostProcessorNames) { nonOrderedPostProcessors.add(beanFactory.getBean(postProcessorName, BeanFactoryPostProcessor.class)); } invokeBeanFactoryPostProcessors(nonOrderedPostProcessors, beanFactory); // 清除缓存的合并bean定义 , 因为后处理程序可能已经修改了原始元数据 , 例如替换值中的占位符 beanFactory.clearMetadataCache(); }
从上面贴的代码中能够看到 , 对于 ssor 的处理主要分两种情况:
对于每种情况都需要考虑硬编码注入注册的后处理器(上面已经提到如何进行硬编码)以及通过配置注入的后处理器
对于 ry 类型的处理器的处理主要包括以下内容:
处理硬编码注册的后处理器
记录后处理器主要使用以下三个List
对于以上后处理器列表 , 统一调用ssor的ry方法
对ssors中非类型的后处理器进行统一的ry方法
普通处理:其实在这一步中 , 就是忽略了类型 , 对ssor进行直接处理 。
流程图中描述了整体调用链路 , 具体调用方法在代码中的注释也描述出来了 , 所以结合起来看应该能够理解整体流程~
总结
本次分析了的后处理器 ssor , 了解了给我们提供的这个扩展接口使用用途和在源码中如何进行激活执行 。
由于个人技术有限 , 如果有理解不到位或者错误的地方 , 请留下评论 , 我会根据朋友们的建议进行修正
代码和注释都在里面 , 小伙伴们可以下载我上传的代码 , 亲测可运行~
Gitee 地址:
地址:
参考资料
Bean 定义
Sping 的容器
拓展接口之ssor , 占位符与敏感信息解密原理
精彩回顾:
Java实现一致性哈希算法 , 并搭建环境测试其负载均衡特性
java的可变参数
Java实现一致性哈希算法 , 并搭建环境测试其负载均衡特性
强烈推荐:
《Java 极客技术》知识星球限时优惠 , 现在加入只需 50 元 , 仅限前 1000 名 , 机不可失时不再来 。长按识别下面的二维码即可加入 , 趁早行动吧!
隆重介绍:
Java 极客技术公众号 , 是由一群热爱 Java 开发的技术人组建成立 , 专注分享原创、高质量的 Java 文章 。如果您觉得我们的文章还不错 , 请帮忙赞赏、在看、转发支持 , 鼓励我们分享出更好的文章 。