背景
前几天新建了一个空的Maven项目,当引入SpringBoot依赖的时候蒙了,之前新建项目时,都是无脑copy之前的pom文件,官方语言是保证各个项目的版本一致,内心os能copy干嘛要动脑。很少想过这几个start文件具体有什么区别,导致应该引入哪些文件。趁着这个机会,稍微整理一下。
正文
start文件介绍
start文件也被称为起步依赖。根据包根路径不同,大概为了两类:官方start依赖和三方依赖。其中所有官方starters遵循相似的命名模式:spring-boot-starter-应用名
,第三方start为了避免跟Spring Boot官方artifacts冲突,其名称通常命名为应用名-spring-boot-starter
。
Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,Spring Boot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。
SpringBoot项目应用最多的基础start文件有以下几类:
依赖名称 | 作用 |
spring-boot-starter-parent | Spring Boot的版本仲裁中心,控制了所有依赖的版本号 |
spring-boot-starter-web | 自动引入了web模块开发需要的相关jar包 |
spring-boot-starter-test | springboot程序测试依赖 |
spring-boot-dependencies | 自动配置实现包 |
spring-boot-starter | Spring Boot的核心启动器,包含了自动配置、日志和YAML |
start文件详情
这么多start文件,都是必须要的吗?它们之间有什么关系呢?之前无脑copy的时候,还真没有想过这个问题?
spring-boot-starter-parent
先看spring-boot-starter-parent,点进去可以看到其实真正起作用的是spring-boot-dependencies,此外spring-boot-starter-parent说明了配置文件的格式。
对于spring-boot-dependencies作用则比较清楚了,它更像一个版本仓库,声明了基础组件依赖的版本,之后引用的时候不用再声明版本了。所以如果在项目中引用了spring-boot-starter-parent,就不用再引用spring-boot-dependencies了。若同时有spring-boot-starter-parent和spring-boot-dependencies,依旧以spring-boot-parent中的版本为准。
spring-boot-starter-web
然后看一下spring-boot-starter-web,这个依赖也是用的特别多。点进去可以看到里面包含的依赖。
spring-boot-starter | Spring Boot的核心启动器,基本每个start依赖都存在它。 |
spring-boot-starter-json | 使用jackson处理请求参数类型匹配和解析 |
spring-boot-starter-tomcat | 内嵌tomcat,从而处理客户端发送的 HTTP 请求 |
hibernate-validator | 主要是用于验证对象的属性是否符合特定的规则和约束 |
spring-web | springMVC中的注解 |
spring-webmvc |
spring-boot-starter
spring-boot-starter,Spring Boot的核心启动器,包含了自动配置、日志和YAML。基本每个start依赖都存在它,如spring-boot-starter-test。简单看了一下spring-boot-starter里面的内容,包含了spring-core,spring-boot-autoconfigure,spring-boot-starter-logging。再细节的内容可能还需要再细节的去研究一下。
总结
一个提供http接口的SpringBoot项目不能缺少的start依赖有两个:spring-boot-starter-parent,spring-boot-starter-web。一个用来声明版本,一个用到嵌入tomcat。当然这句话不可细究。对于spring-boot-dependencies,spring-boot-starter则可以省略。
后续需要整理一下SpringBoot的整体架构,才能从整体看理解和掌握start的机制吧。