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

结束了前面的基础结构分析 , 了解到是如何识别配置文件和进行解析属性 , 最终将 bean 加载到内存中 。同时为了更好得理解的扩展功能 , 我们先来巩固一下和 bean 的概念 , 然后再分析新内容后处理器。
本篇阅读思路:
是什么
如何使用
实现逻辑
在哪注册
激活 ssor
总结
参考资料
前言
首先我们先将想像成一个大容器 , 然后保存了很多 bean 的信息 , 根据定义: bean 是一个被实例化 , 组装 , 并通过容器所管理的对象 , 也可以简单得理解为我们在配置文件配置好元数据 , 容器会帮我们对 bean 进行管理 , 这些对象在使用的时候通过取出就能使用 。
那么是谁帮这个管理呢 , 那就是  , 粗暴点直译为 bean 工厂 , 但其实它才是承担容器功能的幕后实现者 , 它是一个接口 , 提供了获取 bean 、获取别名 Alias 、判断单例、类型是否匹配、是否原型等方法定义 , 所以需要通过引用 , 实现具体方法才后才能使用 。
回顾完后 , 我们再来回顾在前面内容中 , 看到过很多后处理器的代码影子 , 分别是 ssor:主体是  ,  和 :主体是 Bean , 这两者都是用来为使用者提供的扩展功能之一 。
接下来为了更好的分析和了解使用后处理器 , 实现扩展功能 , 一起跟踪源码学习吧~
ssor 是什么
ssor 是一个接口 , 在里面只有一个方法定义:
@FunctionalInterface public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; }
定义:是对外提供可扩展的接口 , 能够在容器加载了所有 bean 信息( #ry 方法)之后 ,  bean 实例化之前执行 , 用来修改 bean 的定义属性 。
可以看到 , 方法参数是 ry  , 说明我们可以通过引用该接口 , 在方法中实现逻辑 , 对容器中 bean 的定义(配置元数据)进行处理
同时 , 执行后处理器是有先后顺序的概念 , 我们可以通过设置 order 属性来控制它们的执行次序 , 前提是 ssor 实现了 Order 接口 。
下面一起来看下它的如何使用 , 以及是如何进行注册和执行~
如何使用 官方例子:
这个类是容器里自带的后处理器 , 是用来替换占位符 , 填充属性到 bean 中 。
像我们在 xml 文件中配置了属性值为 ${max.} , 能够通过它来找到 max. 在配置文件对应的值 , 然后将属性填充到 bean 中 。
虽然在5 中 , 已经打上了不建议使用的标志 @ , 看了文件注释 , 提示我们去使用来设置属性 , 但我觉得这个后处理器的思想是一样的 , 所以还是拿它作为例子进行熟悉 。
先来看下它的继承体系:
~~忽略它被冷落的下划线标签~~
当加载任何实现了 ssor 接口的 bean 配置时 , 都会在 bean 工厂载入所有 bean 的配置之后执行 ry 方法 。
可以看到它引用了 ssor 接口 , 在父类中实现了 ry , 在方法中依次调用了合并资源方法 , 属性转换方法和真正修改中配置元数据的 (,) 方法 。
因为通过在的后处理方法 ry ,  在实例化任何 bean 之前获得配置信息 , 从而能够正确解析 bean 描述文件中的变量引用 。