# 自动配置

SpringBoot 通过 自动配置 简化了大量的繁复的配置信息。

启动类 Application 中有两处特别之处:

  • 注解:@SpringBootApplication

  • run 方法:SpringApplication.run(...)

@SpringBootApplication 注解至少等价于以下三个注解:

  • @SpringBootConfiguration

    • 该是来声明当前类是 SpringBoot 应用的配置类,一个项目中只能有一个

    • 因为该注解的存在,Spring 会再去【找】所有添加了 @Configuration 的类,做相应的操作。

  • @EnableAutoConfiguration

    • 该注解的作用是告诉 Spring Boot 基于 .pom 文件中添加的的 starter 依赖,进行自动配置。

    • 例如,我们引入了 spring-boot-starter-web,而这个启动器中帮我们添加了 tomcat、Spring MVC 的依赖。

    • SpringBoot 内部对大量的第三方库或 Spring 内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应 starter

  • @ComponentScan

    • 该注解提供了类似与 <context:component-scan> 标签的作用。

    • 通过 basePackageClasses 或者 basePackages 属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包。

    • 因此,启动类需要放在一个比较前/浅的包目录中

spring-boot-autoconfigure.jar 中的 org.springframework.boot.autoconfigure 包下包含了各种框架/库的默认配置。


由 Spring 负责提供的 用于快速整合 XXX 框架/组件的自动配置快速整合包,通常的命名规则是:spring-boot-starter-xxx 。例如:

  • spring-boot-starter-tomcat

  • spring-boot-starter-thymleaf

这种由 Spring 提供的自动配置快速整合的包,其版本信息在 spring-boot-parent 中已定义,(除非是真有需要,否则)不需要指定版本信息。

由 XXX 框架/组件方负责提供的用于与 Spring 快速整合的包, 通常的命名规则是: xxx-spring-boot-starter 。例如:

  • mybatis-spring-boot-starter

  • druid-spring-boot-starter

这种由 XXX 方提供的自动配置快速整合包,需要指定版本信息。