SpringBoot依赖原理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1.1 SpringBoot原理
传统的Spring框架实现一个WEB服务需要到Mave仓库找到对应的依赖jar包然后导入lib目录下然后编写对应的XML配置文件等使得项目变的非常的臃肿而SpringBoot在这一方面显得更加轻量那么SpringBoot 是如何做到这些的呢
1.2 依赖管理
Spring Boot导入dependency时为什么不需要指定版本
2.2.1.1 spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.14.RELEASE</version>
</parent>
从上述可以看出将spring-boot-starter-parent依赖作为Spring Boot项目的统一父项目依赖管理并将项目版本号统一为2.1.14.RELEASE该版本号可根据实际开发进行修改。
进入spring-boot-starter-parent底层源文件发现spring-boot-starter-parent的底层有一个父依赖spring-boot-dependencies
```java
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.1.14.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

继续进入spring-boot-dependencies底层源文件其核心代码如下

 <properties>
   ......
    <jolokia.version>1.6.2</jolokia.version>
    <jooq.version>3.11.12</jooq.version>
    <jsonassert.version>1.5.0</jsonassert.version>
    <json-path.version>2.4.0</json-path.version>
    <jstl.version>1.2</jstl.version>
    <jtds.version>1.3.1</jtds.version>
    <junit.version>4.12</junit.version>
    <junit-jupiter.version>5.3.2</junit-jupiter.version>
    <kafka.version>2.0.1</kafka.version>
    <kotlin.version>1.2.71</kotlin.version>
    <lettuce.version>5.1.8.RELEASE</lettuce.version>
    <liquibase.version>3.6.3</liquibase.version>
    <log4j2.version>2.11.2</log4j2.version>
    <logback.version>1.2.3</logback.version>
    <lombok.version>1.18.12</lombok.version>
  ......
    <spring.version>5.1.15.RELEASE</spring.version>
    <spring-amqp.version>2.1.14.RELEASE</spring-amqp.version>
    <spring-batch.version>4.1.4.RELEASE</spring-batch.version>
    <spring-cloud-connectors.version>2.0.7.RELEASE</spring-cloud-connectors.version>
    <spring-data-releasetrain.version>Lovelace-SR17</spring-data-releasetrain.version>
    <spring-framework.version>${spring.version}</spring-framework.version>
    <spring-hateoas.version>0.25.2.RELEASE</spring-hateoas.version>
    <spring-integration.version>5.1.10.RELEASE</spring-integration.version>
    <spring-kafka.version>2.2.13.RELEASE</spring-kafka.version>
    <spring-ldap.version>2.3.3.RELEASE</spring-ldap.version>
    <spring-plugin.version>1.2.0.RELEASE</spring-plugin.version>
    <spring-restdocs.version>2.0.4.RELEASE</spring-restdocs.version>
    <spring-retry.version>1.2.5.RELEASE</spring-retry.version>
    <spring-security.version>5.1.10.RELEASE</spring-security.version>
    <spring-session-bom.version>Bean-SR10</spring-session-bom.version>
    <spring-ws.version>3.0.9.RELEASE</spring-ws.version>
    <sqlite-jdbc.version>3.25.2</sqlite-jdbc.version>
 ......
  </properties>

从底层spring-boot-dependencies底层源文件可以看出该文件通过标签对一些常用技术框架的依赖文件进行了统一版本号管理例如activemq、spring、lombok等都有与2.1.14.RELEASE版本相匹配的版本这也就是pom.xml引入依赖文件不需要标注依赖jar版本号的原因。

spring-boot-starter-parent父依赖启动器的主要作用是进行版本统一管理那么项目运行依赖的JAR包是从何而来
2.2.1.2 spring-boot-starter-web
查看 spring-boot-starter-web源文件源码


<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.1.14.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.1.14.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.1.14.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.19.Final</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.15.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.15.RELEASE</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

从上述代码可以看出spring-boot-starter-web依赖启动器主要作用是提供了web开发场景需要的底层所有依赖。

正是因为如此在pom.xml中引入 spring-boot-starter-web 依赖启动器时就可以实现web场景开发而不需要额外导入Tomcat服务器依赖以及其他web依赖文件。

当然这些引入依赖的文件版本还是由 spring-boot-starter-parent进行统一管理。
2.2.1.3 starter

Spring Boot除了提供上述web依赖启动器以外还提供了许多场景所需要的依赖

Spring Boot 原理深入 - 依赖管理_依赖管理
列出的是Spring Boot提供的一部分启动依赖器还有许多可以从spring官网上查看。不同的场景依赖我们可以根据我们不同的业务场景直接在pom.xml中引入即可。

但是Spring Boot官网并不是针对所有的场景的开发技术框架都提供了依赖启动器如mybatis、druid等但是为了充分利用Spring Boot框架的优势mybatis、druid等技术框架团队主动与Spring Boot框架进行了整合实现了各自的依赖启动器。mybatis-spring-boot-starter、druid-spring-boot-starter。在需要的时候直接在pom.xml文件中导入即可但是需要自己管理版本号。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring