0%

SpringBoot—依赖管理、starter导入与包结构

本文简单说明SpringBoot中的依赖管理starter的作用与导入、包结构与扫描路径。其中讲述了复合注解@SpringBootApplication的展开

1.依赖管理与starter导入

父项目依赖管理

Spring Boot 使用 pom.xml 中的父项目做依赖(dependencies)管理 (即:版本控制)

1
2
3
4
5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>

跟进 pom.xml 中的spring-boot-starter-parent,会看到这个父项目还有一个父项目spring-boot-dependencies。跟进这个项目,可以看到各个常用依赖的具体版本,和依赖本身。
这个机制叫做——自动版本仲裁

starter场景启动器

Starters 是一组方便的依赖描述符,只要导入starters就可以自动导入这个场景下所需的依赖项。
命名方式上,官方srarter(场景启动器)使用spring-boot-starter-*格式命名,第三方starter使用*-spring-boot-starter格式命名。这里的*就代表一种场景。
我们可以在官方文档查询所有的官方starter 。
所有场景启动器最底层的依赖是spring-boot-starter-parent

导入starter

如果你要导入一个场景的依赖,那么就可以在文档中找到这个场景的starter。然后写入到 pom.xml 的<dependencies>标签。
你也可以找到对应场景启动器在spring-boot-dependencies中的<dependency>标签。复制<dependency>标签内容并粘贴在 pom.xml 。
示例:

1
2
3
4
5
6
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

依赖库的版本

导入starter时,这些依赖的版本有两种控制方法——自动版本仲裁手动指定

  1. 自动版本仲裁:如果导入starter时没有设定<version>标签则会依据通过父项目依赖来指定版本
  2. 手动指定版本
    查看spring-boot-dependencies里设定版本用的标签;
    在 pom.xml 中手动添加一个<properties>标签,在内部重写配置;
    可以使用的版本号在MVNrepository中查找;

手动版本指定示例:

1
2
3
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>

另外:还可以在导入starter时,添加<version>标签来实现。

2.自动配置与包结构

这里简单记录SpringBoot为我们配置的项目以及包结构与扫描路径

自动配置

  • 自动配好Tomcat
    • 引入Tomcat依赖
    • 配置Tomcat
  • 自动配好SpringMVC
    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
  • 自动配好Web常见功能,如:字符编码问题
    • SpringBoot帮我们配置好了所有web开发的常见场景
  • 各种配置拥有默认值
    • 默认配置最终都是映射到某个类上,如:MultipartProperties
    • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
  • 按需加载所有自动配置项
    • 非常多的starter
    • 引入了哪些场景这个场景的自动配置才会开启
    • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
  • 自定配置包扫描

3.包结构与扫描路径

得益于Spring Boot的自动配置,我们也无需进行包扫描配置

  • 默认扫描:主程序所在包及其所有子包里的组件
  • 改变扫描路径:
    • 法一:@SpringBootApplication(scanBasePackages="扫描起始包名")
    • 法二:@ComponentScan指定扫描路径(看代码块说明)
  • 正常情况需要把业务@RestController放在主程序包的子包里

@ComponentScan说明:

1
2
3
4
5
6
@SpringBootApplication
是一个复合注解,等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
所谓的“法二”就是把这个复合注解展开写,然后改一下第三个标签