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


启动扩展点
项目在启动的过程中有很多扩展点,这里就来盘点一下几个常见的扩展点 。
1、自动装配
说到的扩展点,第一时间肯定想到的就是自动装配机制,面试贼喜欢问,但是其实就是一个很简单的东西 。当项目启动的时候,会去从所有的.文件中读取@ion键对应的值,拿到配置类,然后根据一些条件判断,决定哪些配置可以使用,哪些不能使用 。
.文件?键值?不错,自动装配说白了就是SPI机制的一种运用场景 。
@ion注解:
1
2
3
4
@(.class)
@ {
//忽略
}
我擦,这个注解也是使用@注解,而且配置类还实现了接口,跟前面也都对上了 。在中,@ion是通过@n来使用的 。
在中还有这样一段代码
所以,这段代码也明显地可以看出,自动装配也是基于SPI机制实现的 。
那么我想实现自动装配怎么办呢?很简单,只需两步 。
第一步,写个配置类:
1
2
3
4
5
6
7
8
9
@
{
@Bean
n () {
Bean();
}
}
这里我为了跟前面的知识有关联,配置了一个 。
第二步,往.文件配置一下
1
2
org..boot..ion=\
com.....n
到这就已经实现了自动装配的扩展 。
接下来进行测试:
1
2
3
4
5
6
7
8
9
10
11
12
@n
on {
([] args) {
= .run(.class);
User user = .(User.class);
.out.("获取到的Bean为"+ user);
}
}
运行结果:
1
2
调用的方法生成 Bean:com....User@
获取到的Bean为com....User@
从运行结果可以看出,自动装配起了作用,并且虽然往容器中注入的Bean的class类型为,但是最终会调用的的实现获取到User对象 。
自动装配机制是的一个很重要的扩展点,很多框架在整合的时候,也都通过自动装配来的,实现项目启动,框架就自动启动的,这里我举个整合 。
整合的.文件
2、 ,这是干啥的呢?
我们都知道,在环境下,外部化的配置文件支持和yaml两种格式 。但是,现在不想使用和yaml格式的文件,想使用json格式的配置文件,怎么办?
当然是基于该小节讲的来实现的 。
1
2
3
4
5
6
7
8
9
{
//可以支持哪种文件格式的解析
[] ();
// 解析配置文件,读出内容,封装成一个结合返回回去
List
> load( name,);
}
对于的实现,两个实现
:可以解析或者xml结尾的配置文件
ader:解析以yml或者yaml结尾的配置文件
所以可以看出,要想实现json格式的支持,只需要自己实现可以用来解析json格式的配置文件的就可以了 。
动手来一个 。
实现可以读取json格式的配置文件
实现这个功能,只需要两步就可以了 。
第一步:自定义一个
ader,实现接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
oader {
@
[] () {
//这个方法表明这个类支持解析以json结尾的配置文件
[]{"json"};
}
@
> load( name,) {
= .();
= .((int) .());
//将文件内容读到中
.read();
//将读出来的字节转换成字符串
=(.array());
// 将字符串转换成
= JSON.();
Map map =(.size());