【死磕 Spring】—

  • 时间:
  • 浏览:1

BeanFactoryPostProcessor 接口仅有另一好几块 postProcessBeanFactory 依据,该依据接收另一好几块 ConfigurableListableBeanFactory 类型的 beanFactory 参数。上面有两行注释:

1、表示了该依据的作用:在 standard initialization(虽然 是我想知道这一为甚在么在翻译:标准初始化?) 事先 (可能如果可能完成了 BeanDefinition 的加载)对 bean factory 容器进行修改。其中参数 beanFactory 应该如果可能完成了 standard initialization 的 BeanFactory。

诚然,一般情況下我门我门 是不让主动去自定义 BeanFactoryPostProcessor ,虽然 Spring 为我门我门 提供了哪几块常用的 BeanFactoryPostProcessor,我门我门 是PropertyPlaceholderConfigurer 和 PropertyOverrideConfigurer ,其中 PropertyPlaceholderConfigurer 允许我门我门 在 XML 配置文件中使用占位符并将那此占位符所代表的资源单独配置到简单的 properties 文件中来加载,PropertyOverrideConfigurer 则允许我门我门 使用占位符来明确表明bean 定义中的 property 与 properties 文件中的各配置项之间的对应关系,这另一好几块 类在我门我门 大型项目涵盖非常重要的作用,后续两篇文章将对其进行全版说明分析。

在上面测试依据中,我门我门 使用的是 ApplicationContext ,对于 ApplicationContext 来说,使用 BeanFactoryPostProcessor 非常方便,可能他会自动识别配置文件中的 BeanFactoryPostProcessor 因此 完成注册和调用,我门我门 只还要简单的配置声明即可。而对于 BeanFactory 容器来说则不行,他和 BeanPostProcessor 一样还要容器主动去进行注册调用,依据如下:

定义如下

提供了另一好几块 自定义的 BeanFactoryPostProcessor ,都继承 BeanFactoryPostProcessor 和 Ordered,其中 BeanFactoryPostProcessor1 改变 name 和 age 的值,BeanFactoryPostProcessor2 该变 age 的值。Ordered 分别为 1 和 2。



studentService 设置 name 和 age 分别为 chenss 和 10。

运行结果:



看完运行结果,虽然 对上面的运行流程就可能一清二楚了。这里就不太久阐述了。

或多或少这里总结一段话如果: postProcessBeanFactory() 工作与 BeanDefinition 加载完成事先 ,Bean 实例化事先 ,其主要作用是对加载 BeanDefinition 进行修改。有或多或少还要还要注意的是在 postProcessBeanFactory() 中千万不后能 进行 Bean 的实例化工作,可能原先会因为 bean 过早实例化,会产生严重后果,我门我门 始终还要注意的是 BeanFactoryPostProcessor 是与 BeanDefinition 打交道的,可能不让与 Bean 打交道,请使用 BeanPostProcessor。

原文发布时间为:2018-12-26

本文作者:chenssy

本文来自云栖社区战略媒体合作伙伴“ Java技术驿站”,了解相关信息都还要关注“chenssy89”微信公众号

BeanFactoryPostProcessor

BeanFactoryPostProcessor 的机制就离米 给了我门我门 在 bean 实例化事先 最后一次修改 BeanDefinition 的可能,我门我门 都还要利用这一可能对 BeanDefinition 来进行或多或少额外的操作,比如更改或多或少 bean 的或多或少属性,给或多或少 Bean 增加或多或少或多或少的信息等等操作。

在博客 【死磕 Spring】----- IOC 之 深入分析 BeanPostProcessor 深入介绍了 BeanPostProcessor 的实现机制。在这篇文章中提到 BeanPostProcessor 是 Spring 提供四种 扩展机制,该机制允许我门我门 在 Bean 实例化事先 初始化之际对 Bean 进行增强正确处理(前、后置正确处理)。同样在 Spring 容器启动阶段,Spring 也提供了四种 容器扩展机制:BeanFactoryPostProcessor,该机制作用于容器启动阶段,允许我门我门 在容器实例化 Bean 事先 对注册到该容器的 BeanDefinition 做出修改。

与 BeanPostProcessor 一样,BeanFactoryPostProcessor 同样支持排序,另一好几块 容器都还要一起拥有多个 BeanFactoryPostProcessor,这一事先 可能我门我门 比较在乎我门我门 的顺序一段话,都还要实现 Ordered 接口。

可能要自定义 BeanFactoryPostProcessor 直接实现该接口即可。

实例

至于 ApplicationContext 是何如自动识别和调用,这一我门我门 后续在分析 ApplicationContext 完会 做全版说明的,当然,可能有兴趣的同学都还要提前看。

2、表示作用时机:所有的 BeanDefinition 可能完成了加载即加载至 BeanFactory 中,因此 还那么完成初始化。