做Java后端的同学可能都知道,在SpringBoot诞生之前,还有传统的Spring。这种Spring项目想要运行,需要导入各种依赖,而且还要在 XML 配置文件中一顿配置,非常痛苦。但通过上篇博客我们可以看到,SpringBoot项目创建完成后可以直接运行,这就是starter机制的功劳。
目录
一、什么是starter
二、约定优于配置
三、starter依赖树
一、什么是starter
starter,顾名思义,是启动器的意思。SpringBoot将各种开发场景用到的依赖都抽取出来,做成一个个的starter,starter中整合了该场景下各种可能用到的依赖,但用户不需要引入多个依赖,只需要在maven中引入starter即可。
举例来说,我们开发web应用,那么需要导入spring-boot-starter-web,而该starter中包含了开发web应用场景需要的所有的依赖(比如tomcat等)。而我们只需要导入这一个starter就可以了,根本不用关心其内部的构成。
通俗来讲,要想打开家里的某个电器,只需要按下该电器的开关即可,根本不用关心开关是怎么一步步启动电器的。
Spring官方提供了很多starter,当然也有很多第三方的starter。starter从名称上进行了如下规范:
- Spring官方提供的starter命名规范:spring-boot-starter-xxx,例如spring-boot-starter-web
- 第三方提供的starter命名规范:xxx-spring-boot-starter,例如mybatis-spring-boot-starter
二、约定优于配置
相信很多同学都听过"约定优于配置"这个术语,引用百度百科对这个术语的解释:
约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。
这个术语在SpringBoot的starter可谓是完美的体现。SpringBoot的所有starter都遵循着默认配置,并且允许用户调整这些配置。也就是说,只要你导入了某个starter,即使你什么都不去配置,那么我默认都给你配置好了,你可以直接用。你如果不满意我的配置或者想手动修改,那么你可以自己去修改配置。
三、starter依赖树
在上篇博客中,我们创建了第一个SpringBoot项目,并且在创建项目时,添加了Spring Web的依赖:
相应的,pom.xml中生成了该依赖项,也就是上面我们举例的spring-boot-starter-web:
接下来,我们通过如下命令看下该starter的依赖树:
mvn dependency:tree
依赖树信息如下,可以看到,spring-boot-starter-web默认导入了例如logging、json、tomcat等诸多的依赖库,而我们并没有对这些依赖库进行引入和配置,而这些依赖项确实是我们在开发 Web应用时所需要的:
本篇介绍了什么是starter、starter的命名规则, 并且举例介绍了编程术语"约定优于配置"的含义。最后,通过mvn打印starter依赖树的方式验证了starter包含一切该场景依赖项这一特点。