关于java:学习笔记系列之SpringBoot自动装配原理

4次阅读

共计 1551 个字符,预计需要花费 4 分钟才能阅读完成。

前言

咱们都晓得,应用 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 中,而不再须要咱们去手动配置了。反正每次配置都差不多,何必每个我的项目都去配置呢,对吧!

正文完
 0