2.1.properties配置文件加载
family.properties
这种格式的配置文件,在之前章节的代码基础之上,使用如下的注解就可以将文件中的配置属性进行加载,非常简单!
@PropertySource(value = {"classpath:family.properties"})
public class Family {
2.2.yaml配置文件加载
spring 官方文档明确说明不支持使用@PropertySource加载YAML配置文件,但是我们仍然有办法,跟着我继续。
举一个例子:我们新建一个配置文件family.yml,把上一节用到的YAML数据结构放里面。用来模拟第三方jar包的额外配置文件(非application配置文件)。
# 1. 一个家庭有爸爸、妈妈、孩子。
# 2. 这个家庭有一个名字(family-name)叫做“happy family”
# 3. 爸爸有名字(name)和年龄(age)两个属性
# 4. 妈妈有两个别名
# 5. 孩子除了名字(name)和年龄(age)两个属性,还有一个friends的集合
# 6. 每个friend有两个属性:hobby(爱好)和性别(sex)
family:
family-name: "happy family"
father:
name: zimug
age: 18
mother:
alias:
- lovely
- ailice
child:
name: zimug2
age: 5
friends:
- hobby: football
sex: male
- hobby: basketball
sex: female
-
笔者通过阅读代码了解到,DefaultPropertySourceFactory是进行配置文件加载的工厂类。
-
尽管其默认不支持读取YAML格式外部配置文件,但是我们可以通过继承DefaultPropertySourceFactory ,然后对它的createPropertySource进行一下改造。就可以实现YAML的“额外”配置文件加载。
public class MixPropertySourceFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(@Nullable String name,
EncodedResource resource)
throws IOException {
String sourceName = name != null ? name : resource.getResource().getFilename();
if (sourceName != null
&&(sourceName.endsWith(".yml") || sourceName.endsWith(".yaml"))) {
Properties propertiesFromYaml = loadYml(resource);
//将YML配置转成Properties之后,再用PropertiesPropertySource绑定
return new PropertiesPropertySource(sourceName, propertiesFromYaml);
} else {
return super.createPropertySource(name, resource);
}
}
//将YML格式的配置转成Properties配置
private Properties loadYml(EncodedResource resource) throws IOException{
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
}
}
- 然后基于上一节的代码,在Family类的上面加上如下注解即可。通过factory属性明确的指定使用我们自定义的MixPropertySourceFactory加载yml配置文件。
@PropertySource(value = {"classpath:family.yml"}, factory = MixPropertySourceFactory.class)
public class Family {
三、使用@ImportResource加载Spring的xml配置文件
在没有Spring注解的时代,spring的相关配置都是通过xml来完成的,如:beans.xml。下面的XML配置的含义是:将com.zimug.bootlaunch.service.TestBeanService实例化并注入到Spring上下文环境中。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
# 总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
# Mybatis源码解析
![](https://img-blog.csdnimg.cn/img_convert/8f470ea2d2ef29e7971c056b22af8f7a.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/10333a311737155e140864bd9daabb28.webp?x-oss-process=image/format,png)
瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
# Mybatis源码解析
[外链图片转存中...(img-O466HS4z-1725970762108)]
[外链图片转存中...(img-sZpuRmqB-1725970762108)]