学习自用:本文意在解决在引入依赖时存在的疑惑
目的\达成效果:粗浅理解到所引入依赖的作用,以便抽取某些公共模块
下面展示`spring-boot-starter-web的pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starters</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
<name>Spring Boot Web Starter</name>
<description>Starter for building web, including RESTful, applications using Spring
MVC. Uses Tomcat as the default embedded container</description>
重点需要关注2个部分:
1.description部分:
可以看到,对于spring-boot-starter-web依赖的描述是这样的:
它是作为搭建web的启动器
包括三个要点:
a.Restful
b.SpringMVC的组件
c.tomcat作为默认的嵌入式容器
这意味着:
Restful : 在开发过程中,可以采用restful风格编写代码
SpringMVC的组件:
为什么我们能够在类上controller注解就将这个类变成一个控制器,这就是因为有SpringMVC组件的支持
tomcat作为嵌入式容器:后期深入学习补充
2.parent部分—spring-boot-starters
进入spring-boot-starters的pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath>../spring-boot-parent</relativePath>
</parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starters</artifactId>
<version>2.0.5.RELEASE</version>
<packaging>pom</packaging>
<name>Spring Boot Starters</name>
<description>Spring Boot Starters</description>
关于spring-boot-starters的description(描述)很简单,就是spring-boot-starters,这里顾名思义地去理解,它就是springboot的一个启动器,在这个启动器的启动前提下,我们能够去启动web依赖下的东西
再进入spring-boot-starters的parent:spring-boot-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath>../spring-boot-dependencies</relativePath>
</parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.0.5.RELEASE</version>
<packaging>pom</packaging>
<name>Spring Boot Parent</name>
<description>Spring Boot Parent</description>
我的理解:springboot的starter启动器不能独自启动,也需要环境支撑,而springboot-parent就提供了springboot-starter的启动环境
再进入Spring Boot Paren的parent:spring-boot-dependencies
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.5.RELEASE</version>
<packaging>pom</packaging>
<name>Spring Boot Dependencies</name>
<description>Spring Boot Dependencies</description>
可以看到,在spring-boot-dependencies的pom文件不再存在parent标签
继续往下看:
我们发现,在这里有大量的properties配置和dependencies依赖
篇幅有限,下面截取片段:
<properties>
<activemq.version>5.15.6</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.64</appengine-sdk.version>
<artemis.version>2.4.0</artemis.version>
<aspectj.version>1.8.13</aspectj.version>
<assertj.version>3.9.1</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
<bitronix.version>2.1.4</bitronix.version>
------此处省略大量------
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
----------此处省略大量---------
几个关键点:
1.在properties中存在大量的版本控制的配置信息:
解释:
这也就是为什么有时候当我们引入了spring-boot-starter-parent或者是spring-boot-parent依赖时,我们可以在引入如数据库mysql的依赖时,可以不用去配置数据库的版本信息,因为在上述两个依赖中已经对配置信息进行了管理。
2.在spring-boot-dependencies中依赖并非全部启用的
解释:
一、在spring-boot-dependencies的pom文件看到,有相当一部分的组件是红色的,这意味着它们并非自动引入的,只要当我们需要引入时才引入
二、在spring-boot-dependencies的pom文件中也存在一部分我们没有手动引入便自动开启的依赖,我的理解是它们是实现spring-boot的基础功能所必须的依赖;当我们引入springboot后,它们就处于默认开启状态,以便我们进行springboot开发
3.spring-boot-dependencies的作用
解释:
spring-boot-dependencies类似于一个一“依赖包的注册和管理中心”,它管理了大量的依赖和其默认的版本信息,如果你在引入spring-boot-dependencies中存在的jar包并且不携带其版本信息,那么就以spring-boot-dependencies中的默认版本信息为准,如果你在dependency中声明了版本信息,则以你所声明的版本信息为准
什么时候我们需要引入spring-boot-web包?
当我们进行springMVC架构开发,更直白地说,如果想要在类上注入controller、service等等、或者想要用GetMapping的restful风格注解,就需要引入spring-boot-starter-web包。