Spring Boot深度课程系列
峰哥说技术—2020庚子年重磅推出、战胜病毒、我们在行动
06 峰哥说技术:手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理
Spring Boot中的启动器是如何启动的,很多人都对这个问题搞不清楚。今天峰哥带着大家
通过自定义一个启动器,可以很容易的看懂Spring Boot是怎么样自动配置的。下面我们通过一个案例来说明这个问题。步骤如下
A)新建一个普通的Maven项目,关键部分截图如下。
B)在工程的pom.xml文件中添加Spring boot自动化配置依赖,其他的部分无需修改。
<dependencies> |
C)配置完成后,我们首先创建一个 HelloProperties 类,用来接受 application.properties 中注入的值,如下
package com.java; |
该配置类很好理解,我们在后面新建一个工程,可以根据需要,通过application.properties将我们自已配置的属性值注入到name和age中。如果没有注入就会使用默认的值“罗贯中”和34,让属性值为这两个。类上的注解我们前面学过,应该也不陌生。
D)创建一个service包,创建业务类HelloService.功能非常简单,就是一个输出name和age的功能。编码如下:
package com.java.service; |
E)编写自动配置类HelloServiceAutoConfiguration,先写代码。然后后面进行解释说明。
package com.java.configuration; |
对自动配置类的注解进行解释说明:
l @Configuration表明这是一个配置配。
l @EnableConfigurationProperties(HelloProperties.class)表示自动配置属性类,让HelloProperties类的属性进入Spring的Bean中。
l @ConditionalOnClass(HelloService.class):这个注解是Conditional注解的子注解,意思是表示当项目当前 classpath 下存在如果HelloService类存在,后面的配置才生效,这个原理就是我们前面讲解的条件注解,大家可以回忆一下条件注解的用法。
E)创建资源文件夹,在resources文件夹下面创建META-INF文件夹,然后创建spring.factories文件。其实这个我们可以随便参考一个启动器,就能很清楚的知道。
Spring.factories的内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.java.configuration.HelloServiceAutoConfiguration |
F)打包到本地仓库供我们使用,在第一个工程chapter01中添加如下依赖,并在HelloController中添加测试方法。代码如下:
G)修改application.yml,然后对author进行属性配置。再次进行测试,最后结果如下:
l application.yml
spring: |
l pom.xml添加依赖
<dependency> |
HelloController类添加如下代码
@RestController |
在浏览器输入:http://localhost:8083/test
问题:清说明Spring boot自动配置的原理?
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
大家可以动手写一下,无需半个小时。峰哥会按照一定的节奏,在公众号发布,同时大家也可以关注我在博客园中的专栏https://www.cnblogs.com/027kgc/.对于文章中的内容,峰哥会陆续开始免费的公开课。