springboot启动流程——如何加载默认配置

前言

       我只是一名尚未参加工作的大学生,纯纯的springboot小白,本文仅用作自己学习记录使用。若其中出现任何错误,都欢迎指出,如果在我查阅资料后发现确实是我的错误,那将会立即更正,请不要喷我。

       本篇文章参考了大量CSDN已有的博客,且我本人也查阅了相关的springboot源代码。

 

正文

首先让我们从头开始。

众所周知,springboot应用在启动类上都有一个注解,@SpringBootApplication;

这个注解如果朋友们打开它的声明,就会发现里面还有三个(不只是三个,但是本文只关心这三个)注解;

分别是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan;

其中的@SpringBootConfiguration和@Configuration是差不多意思的,只不过@SpringBootConfiguration允许自动找到配置。

注意看高亮部分的注释。

然后我们再点开里面的@Configuration注解的声明,里面有一个@Import(AutoConfigurationImportSelector.class)

AutoConfigurationImportSelector里面有一个selectImports()方法,再次往下深入,就会发现一个叫做getCandidateConfigurations()的方法。

显然,从方法名就能看出来,这就是拿到默认配置类(不是默认配置!不是默认配置!不是默认配置!)的地方了。源代码如下所示:

这时候一定会好奇,这个META-INF/spring.factories里面到底是什么。如下图所示:

这些其实就是自动配置类(java config)的全限定名。打开其中一个叫ServletWebServerFactoryAutoConfiguration的类进去看看。就会发现如下图所示的东西:

注意看红色框框的内容,@EnableConfigurationProperties(ServerProperties.class)的意思是把已经添加了默认配置属性的ServerProperties注入进来。

需要注意的是,ServerProperties长这样:它头上有一个注解@ConfigurationProperties与@EnableConfigurationProperties配合使用。

这里就表示去填充在spring-configuration-metadata.json中,并且以server开头的数据了。

著名的8080也在这里(虽然这里不写也无所谓,tomcat底层实现时已经把端口默认设置成了8080。)

到这里,springboot的自动配置就算是完成了。如果需要自定义配置,具体可以参考下面这篇博客。

https://www.jianshu.com/p/57fec884c017

 

最后

希望可以引用大佬的一段话来结尾(侵删):

Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
————————————————
版权声明:本文为CSDN博主「圣斗士Morty」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014745069/article/details/83820511

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值