三万字盘点Spring/Boot的那些常用扩展点( 四 )


//将 json 的键值对读出来,放入到 map 中
for( key : .()) {
map.put(key, .(key));
}
.(("", map));
}
}
第二步:配置
ader 已经有了,那么怎么用呢?当然是SPI机制了,对于配置文件的处理,就是依靠SPI机制,这也是能扩展的重要原因 。
SPI机制加载实现.文件配置
会先通过SPI机制加载所有,然后遍历每个,判断当前遍历的,通过获取到当前能够支持哪些配置文件格式的解析,让后跟当前需要解析的文件格式进行匹配,如果能匹配上,那么就会使用当前遍历的来解析配置文件 。
其实就属于策略接口,配置文件的解析就是策略模式的运用 。
所以,只需要按照这种格式,在.文件中配置一下就行了 。
org.springframework.boot.env.PropertySourceLoader=\com.sanyou.spring.extension.springbootextension.propertysourceloader.JsonPropertySourceLoader
到此,其实就扩展完了,接下来就来测试一下 。
测试
先创建一个.json的配置文件
.json配置文件
改造User
1
2
3
4
5
{
// 注入配置文件的属性
@Value("${.:}")
;
}
启动项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@n
on {
([] args) {
= .run(.class);
User user = .(User.class);
.out.("获取到的Bean为"+ user +",属性值为:"+ user.());
}
@Bean
user() {
();
}
}
运行结果:
获取到的Bean为com.sanyou.spring.extension.User@481ba2cf,属性username值为:三友的java日记
成功将json配置文件的属性注入到User对象中 。
至此,就支持了以json为结尾的配置文件格式 。
Nacos对于的实现
如果你的项目正在用Nacos作为配置中心,那么刚刚好,Nacos已经实现json配置文件格式的解析 。
Nacos对于的实现
Nacos不仅实现了json格式的解析,也实现了关于xml格式的配置文件的解析,并且优先级会比默认的xml格式文件解析的优先级高 。至于Nacos为啥需要实现?其实很简单,因为Nacos作为配置中心,不仅支持和yaml格式的文件,还支持json格式的配置文件,那么客户端拿到这些配置就需要解析,已经支持了和yaml格式的文件的解析,那么Nacos只需要实现不支持的就可以了 。
3、
也是启动过程的一个扩展点 。
在启动过程,会回调这个类的实现方法,传入 。
那怎么用呢?
依然是SPI 。
SPI加载
然后遍历所有的实现,依次调用
调用
这里就不演示了,实现接口,按照如下这种配置就行了
但是这里需要注意的是,此时传入的并没有调用过方法,也就是里面是没有Bean对象的,一般这个接口是用来配置,而不是用来获取Bean的 。
4、ssor
ssor在启动过程中,也会调用,也是通过SPI机制来加载扩展的 。
ssor
ssor是用来处理ent的,也就是一些配置信息,所有的配置都是存在这个对象的 。
说这个类的主要原因,主要不是说扩展,而是他的一个实现类很关键 。
这个类的作用就是用来处理外部化配置文件的,也就是这个类是用来处理配置文件的,通过前面提到的解析配置文件,放到ent里面 。
【三万字盘点Spring/Boot的那些常用扩展点】5、和
和都是在成功启动之后会调用,可以拿到启动时的参数 。
那怎么扩展呢?
当然又是SPI了 。

三万字盘点Spring/Boot的那些常用扩展点

文章插图