背景
如果研究springboot,那么必然要研究它的自动装配,而自动配置的核心如下:
- SpringbootApplication注解所带动的一系列配置(这里是静态的,当run后进行扫描的时候,就会全部涉列到,本文重点阐述)
- run方法(启动过程,将来另外的wiki进行阐述)
SpringBootApplication探索过程
总览
细看
Spring boot必须要做的两件事,做完之后就可以编译运行了。
看一下SpringBootApplication注解,其中有两个重要的组合注解SpringBootConfiguration和EnableAutoConfiguration
这里说明了它是一个配置注解
EnableAutoConfiguration又扩展了两个,这里已经开始涉及到实现类了
@Import就相当于xml中的Import标签的作用(这里需要再深入一下)??。在AutoConfigurationImportSelector里面有一个非常重要的地方,如下图:
说明获取候选配置都是从META-INF/spring.factories来的,这种callback的实现,是完全参照的java的spi机制。
来看下spring.factories文件。发现这里预留了全部的回调配置,这里就是spring boot的自动配置核心。spring本身是不能自己配置的,而spring boot官方项目帮我们做了这一点。
同目录下有个metadata文件,这个是application.properties的默认配置数据文件:
找一下server.port,是不是很熟悉了
spring.factories里面把全部的配置都写了,但是在使用中并不是全部都加载,这是怎么控制的呢?我们拿MongoAutoConfiguration来做一个例子,MongoClient为红色,说明没有引入这个类的包,这样就能被@ConditionalOnClass过滤掉
来看一下WebMvcAutoConfiguration,主要就是用到了@Bean、@ConditionalOnXXX来进行bean的导入
配置文件相关
配置文件的加载是由listener机制实现的。在spring.factories中配置了你ConfigFileApplicationListener
在这里能看到我们经常使用的内容,比如application、active等
debug一下,发现active是default
评价
SpringBootApplication注解用于完成所有的配置,而具体的配置信息全部来自于application.properties文件。