深入研究 BeanFactoryPostProcessor
💡
原文中文,约5100字,阅读约需13分钟。
📝
内容提要
本文深入研究了Spring的BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor扩展点的调用过程,以及解决Bean属性值不生效的方法。还分享了通过Environment对象获取配置参数和设置日志级别的小技巧。
🎯
关键要点
- 深入研究 BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor 的调用过程。
- Spring 启动流程需要通过实现 BeanFactoryPostProcessor 接口来扩展 BeanDefinition。
- invokeBeanFactoryPostProcessors 方法的细节复杂,涉及双重循环执行。
- BeanDefinitionRegistryPostProcessor 的处理顺序包括用户手动添加的类和实现 PriorityOrdered、Ordered 接口的类。
- PropertySourcesFactoryPostProcessor 的执行顺序影响 Bean 的初始化,导致属性值不生效。
- 解决属性值不生效的方法是让 RecorderBeanFactoryPostProcessor 实现 PriorityOrdered 接口并提高优先级。
- 通过 EnvironmentAware 接口获取配置参数,解决 @Value 注解解析问题。
- 可以通过设置日志级别为 TRACE 来打印 Bean 创建日志。
➡️