Spring加载配置文件的方式

Spring加载配置文件的方式,第1张

转: https://blog.csdn.net/HaHa_Sir/article/details/79105951

1、用法示例: 在spring.xml配置文件中添加标签

2、在 spring.xml 中使用配置文件属性

3、在java文件中使用:

需开启注解注入:

<context:annotation-config/>或 <context:component-scan/>

1、用法示例: 在spring.xml配置文件中添加标签

2、在spring.xml 中使用配置文件属性:

3、在java文件中使用:

1、用法示例:在java类文件中使用 PropertySource 注解:

2、在java文件中使用:

1、用法示例:在 spring.xml 中使用 <bean>标签进行配置

2、 PropertyPlaceholderConfigurer 配置方法,等价于 方式一,用法参考方法一

五、 还可以使用 org.springframework.beans.factory.config.PropertiesFactoryBean 加载,这里不再逐一列举了。

这样xml中配置的bean的属性就会被注入配置文件里面对应的值

首先xml中的bean会在扫描的过程中封装成BeanDefinition对象,property标签会被弄成一个ProprotyValue的集合放在BeanDefinition的ProprotyValues变量中,所以在xml解析完成之后的BeanDefinition的ProprotyValues变量是这样的

上节PropertySourcesPlaceholderConfigurer这个类收集了environment配置信息和本地配置信息,并把它放在了PropertySourcesPropertyResolver的propertySources属性中

最后创建了一个StringValueResolver对象会调用PropertySourcesPropertyResolver来处理配置信息的替换

接下来就是取出所有的BeanDefinition,看看beanDefinition中的属性中是否有${}表达式,有的话就替换

很多的属性都可以用${}来引用配置信息

重点看看属性是如何被替换的

在BeanDefinitionVisitor.resolveValue方法中,String类型的走这

最终会调到PropertySourcesPlaceholderConfigurer创建的StringValueResolver匿名对象的实现方法中

这个匿名对象实现的方法又会调用PropertySourcesPropertyResolver来替换值,前面有提到所有的配置信息都在PropertySourcesPropertyResolver.propertySources中,那么接下来的工作就是从这个容器中找到对应的配置信息的key所对应的value

这里在入参时会创建一个PlaceholderResolver的匿名对象,实现的resolvePlaceholder方法将会调用PropertySourcesPropertyResolver.getPropertyAsRawString()

最后返回了被替换成对应配置信息的值

这里就会调用前面创建的匿名对象的实现方法,方法体重会调用调用PropertySourcesPropertyResolver.getPropertyAsRawString(),去用key获取对应的配置信息

PropertySourcesPropertyResolver.getPropertyAsRawString()

PropertiesPropertySource对象内部有name,和source,source是一个泛型,当前类型为Properties,PropertiesPropertySource需要实现getProperty方法,其实就是从source中获取属性值

最后调到了Properties类的get方法,返回value

对每个beanDefination都这样 *** 作过一遍

注意这个StringValueResolver的resolveStringValue会调用PropertySourcesPropertyResolver的方法来处理配置信息的替换,PropertySourcesPropertyResolver持有了所有的配置信息。 那么后面@Value的解析也将StringValueResolver来完成

@Value的解析工作是在Bean实例化后,属性注入的时候从配置文件找出并设置进去的

populateBean方法

只有string类型的才能@Value注解,才需要处理

又是这个容器,之前PropertySourcesPlaceholderConfigurer的doProcessProperties放进去的StringValueResolver

最后又会回到这个地方解析并注入值,和xml方式获取配置信息是一样的

找到对应的配置信息之后,反射设置这个属性的值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11819040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存