Spring Boot 原理深刻 - 依賴管理

2.2 原理深刻

傳統的Spring框架實現一個WEB服務,須要導入各類依賴JAR包,而後編寫對應的XML配置文件等,相比較而言,Spring Boot 顯得更加方便、快捷、高效。那麼Spring Boot 到底是如何作到這些的呢?web

2.2.1 依賴管理

問題:爲何Spring Boot導入dependency時不須要指定版本?spring

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,該版本號可根據實際開發進行修改。sql

進入spring-boot-starter-parent底層源文件,發現spring-boot-starter-parent的底層有一個父依賴spring-boot-dependenciesjson

<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底層源文件,其核心代碼以下tomcat

<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包是從何而來?markdown

2.2.1.2 spring-boot-starter-web

查看 spring-boot-starter-web源文件源碼session

<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開發場景須要的底層全部依賴。mybatis

正是由於如此,在pom.xml中引入 spring-boot-starter-web 依賴啓動器時,就能夠實現web場景開發,而不須要額外導入Tomcat服務器依賴以及其餘web依賴文件。mvc

固然,這些引入依賴的文件版本仍是由 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文件中導入便可,可是須要本身管理版本號

相關文章
相關標籤/搜索