前言

咱们都晓得,应用SpringBoot开发我的项目十分简便,在以往的SSM框架中,往往会因为一大堆的稀稀拉拉的xml配置文件而糟心不已。自从SpringBoot的呈现,扭转了这个现状。咱们往往只须要去关注业务实现而不须要去过多分心与固定的且繁琐的配置。而SpringBoot主动拆卸便是其中一大功臣。
接下来,间接进入正题吧。来理解一下,SpringBoot的主动拆卸是如何实现的~
## 从启动类动手

这是springBoot启动类,启动我的项目从这里运行。那么咱们看看这个注解蕴含了什么吧~

能够看到在SpringBootApplication接口上有好些注解,下表大略介绍了一下注解的用途
|注解名字|注解作用|
|:-------:|:-------:|
|@Target|注解的作用指标:就是你的注解能够写在哪个指标上。比方图中的Element.TYPE,则代表接口,类,枚举,注解|
|@Retention|保留策略:图中代码为RetentionPolicy.RUNTIME代表运行时保留|
|@Documented|生成java文档|
|@Inherited|示意该父类注解会被子类继承|
|@SpringBootConfiguration|标注该类是配置类|
|@EnableAutoConfiguration|重点:主动拆卸配置|
|@ComponentScan|扫描组件|

尽管这么多注解,然而其实重要的就是@EnableAutoConfiguration,接下来咱们也会对这个注解进行深入分析。
## 从主动配置注解深刻
咱们点击进入@EnableAutoConfiguration注解,能够发现:

这个@Import导入注解又是咱们的外围,它传入一个主动配置导入选择器的类。(看这名字起得,一看就晓得和主动配置导入有关系了!)
## 如何导入主动配置
在这个AutoConfigurationImportSelector类中有这么一个办法

  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;  }

看这办法名起得,(获取候选配置),正是在下所要找的。办法扫描META-INF/spring.factories这个文件里的东东来实现主动配置。看到断言了吗,返回配置后,断言配置不为空,如果空了,就阐明没有找到主动配置的类。接下来就是找这个文件了,看看外面是些啥货色~
## spring.factories揭秘.

这就是很分明了,就是一堆KV键值对,key是EnableAutoConfiguration全类名,value则是一大堆全类名列表,代表了主动拆卸的类。
## 总结
实质来说,主动拆卸就是通过配置文件以kv的模式把咱们所常常须要配置的类固定到springBoot中,而不再须要咱们去手动配置了。反正每次配置都差不多,何必每个我的项目都去配置呢,对吧!