springboot自动装配

1 简介

从我们使用后来看springboot手脚架.只需要简单的配置就能搭建一个开发框架.无需各种复杂的pom文件,无需各种复杂的配置文件.简单运行main方法就可以直接运行.与其他框架的整合也是极其方便.这也正如官方简介一样easy.

2 源码解析

先看启动类,通过启动类看到@SpringBootApplication 注解被标注到上面.那么不难推测,这个注解背后肯定存在某种不为人知事情.那么搞定他背后的东西就要从这入手..

image.png

image.png

@SpringBootApplication

@SpringBootApplication标注的类。说明当前类是springboot应用的启动类。
image.png

@SpringBootConfiguration

  • Spring Boot的配置类
  • 标注在某个类上,表示这是一个Spring Boot的配置类

被当前注解标注说明当前类可以作为springboot应用的配置类

@EnableAutoConfiguration

  • 开启自动配置功能
  • 以前使用Spring需要配置的信息,Spring Boot帮助自动配置;
  • @EnableAutoConfiguration 通知SpringBoot开启自动配置功能,这样自动配置才能生效。

image.png

1. @AutoConfigurationPackage

自动配置包注解
image.png
默认将主配置类( @SpringBootApplication )所在的包及其子包里面的所有组件扫描到Spring容器中。如下
image.png

2 . @Import(AutoConfigurationImportSelector.class)

image.png

通过源码看出 AutoConfigurationImportSelector implements DeferredImportSelector 重写 selectImports 方法.其中selectImports 中调用

image.png

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getAutoConfigurationEntry方法如下:
image.png

总结

  • 任何一个springboot应用,都会引入spring-boot-autoconfigure,而spring.factories文件就在该包下面。spring.factories文件是 Key=Value形式,多个Value时使用,隔开,该文件中定义了关于初始化,监听器等信息,而真正使自动配置生效的key是 org.springframework.boot.autoconfigure.EnableAutoConfiguration

  • @EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在 SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的 class,然后将所有自动配置类加载到Spring容器

自动装配流程图如下:

image.png