12.spring源码之属性文件解析
2021/8/14 17:06:01
本文主要是介绍12.spring源码之属性文件解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
讲到这里,refresh()中核心方法就剩下finishBeanBactoryInitialization()方法没讲,这个方法主要是Bean的实例化、依赖注入、AOP,在讲这个方法之前我们讲一些其他的知道,如属性文件解析、如果没有配置文件,那么BeanDefinition怎么来的,Bean的实例化是依赖于BeanDefinition,今天就讲一讲属性文件的解析。
1.进入ContextNamespaceHandler类
我们知道context标签的handler是ContextNamespaceHandler,在是这个类的init()方法完成对各个具体标签的注册,property-placeholder属性文件解析对应的处理类是PropertyPlaceholderBeanDefinitionParser.。
2.进入PropertyPlaceholderBeanDefinitionParser类
具体的解析其实交给PropertySourcePlaceholderConfigurer这个类来完成的,这个类是一个BeanFactoryPostProcessor接口的一个实现,在前面讲过,对实现了BeanFactoryPostProcessor接口的类会调用它的postProcessorBeanFactory()方法,而属性文件的解析就是在这个方法中完成的
3.PropertySourcePlaceholderConfigurer类的postProcessorBeanFactory()方法
这个方法就是把Environment和属性文件中key、value放入Properties对象,然后把Properties对象封装成PropertySource对象,然后加入到MutablePropertySource的list容器中
把属性文件中key、value放入Properties对象在mergeProperties()方法中
4.进入processProperties()方法
5.进入doprocessProperties()方法
6.进入visitBeanDefinition()方法
除了属性值可以配置在属性配置文件中,类、工厂方法名等都可以。以PropertyValue为例
7.进入visitPropertyValues()方法
8.进入resolveValue()方法
9.进入rsolverStringValue()方法
10.进入replacePlaceholder()方法
11.进入parseStringValue()方法,真正的解析是在这个方法完成的
resolverPlaceholder()方法其实就是从Properties对象中根据key拿到value值,placeholder就是${}的key值
最终都是通过getProperty()方法根据Key从Properties中获取value值。像Environment,在最开始的postProcessorBeanFactory()方法中处理Environment的时候就重写了getProperty()方法,就是从environment根据Key获取value值
12.回到第4步中,我们看一下@Value注解的解析
StringValueResolver这个接口中只有一个resolveStringValue()方法,调用这个方法就会走这个lambda表达式的代码,在第5步的时候把解析器放入了一个容器中,在依赖注入解析@Value的时候就会从容器中拿到这个解析器,调用resolveStringValue()方法,然后就会执行这个lambda表达式的内容,完成@value的解析,从属性文件中获取value值,完成依赖注入。
其实也是一样调用getProperty()方法
再看replacePlaceholders()方法,最终也会走到parseStringValue这个方法
这篇关于12.spring源码之属性文件解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?
- 2025-01-10实现精准执行:团队协作新方法
- 2025-01-10如何使用工具提升活动策划团队的工作效率?几个必备工具推荐
- 2025-01-10WiX 标签使用介绍:打造专业安装程序的利器