
官方解釋Springboot:我們對Spring平臺和第三方庫持固執(zhí)己見的觀點,因此您可以以最小的麻煩開始使用。大多數(shù)Spring Boot應用程序需要最少的Spring配置。
為何springboot可以如此便攜,則來源于springboot的自動配置,接下來講解原理。如集成redis來說。
從啟動類@SpringBootApplication入手

而此注解下的@EnableAutoConfiguration注解則是自動配置注解。

通過注解再點擊

發(fā)現(xiàn)有一個select選擇器

而此選擇器最終會有一個configuration數(shù)組被返回。
而這個數(shù)組則是通過掃描一個spring.factory來獲取的
通過下面代碼發(fā)現(xiàn):
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
//最后追溯到這里

結論:springboot自動配置是尋找項目下的spring.factories的文件來實現(xiàn)自動配置
現(xiàn)在,我們找一個redis的factories來看看。

點進此類查看
@Configuration( //申明配置類
proxyBeanMethods = false
)
//判斷有無RedisOperations這個類
@ConditionalOnClass({RedisOperations.class})
//配置這個類的參數(shù)在RedisProperties.class查找
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
通過作者代碼注釋,我們可以總結:
此類的注解:
1: 申明是一個配置類
2:判斷是否存在RedisOperations ,存在則開始自動注入
3: 自動配置的參數(shù)在RedisProperties.class中查找
點擊 RedisProperties進入

@ConfigurationProperties判斷配置文件有無spring.redis這個前綴。有的話則繼續(xù)查找參數(shù)注入。如:spring.redis.port
所以:當我們在集成redis的時候,只需要導入redis的jar包,并在application.yml下配置了spring.redis.下的參數(shù)(如:spring.redis.port 指定端口)。
1:那么springboot會掃描項目是否導入了redis的jar包,則就是剛才的(判斷有無RedisOperations這個類)
2:springboot則會去application.yml查找是否添加了spring.redis開頭的配置。有則在初始化redis的時候將配置加載進去。