1. 程式人生 > 其它 >SpringBoot良心教程(四)依賴管理特性--瞭解自動配置原理

SpringBoot良心教程(四)依賴管理特性--瞭解自動配置原理

SpringBoot特點

1.1、依賴管理

我們在上一個HelloWorld的專案中,引入了一個父專案,然後細心的同學會發現,我們在引入其他dependency的時候,都沒有寫版本號:

<!-- pom.xml中引入的父專案 -->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.5.2</version>
</parent>
<!-- 上面的父專案裡的父專案 -->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.5.2</version>
</parent>
<!-- 再進入上述父專案,可以在properties標籤中看到,原來版本號都寫在這裡 -->
<properties>
    <activemq.version>5.16.2</activemq.version>
    <antlr2.version>2.7.7</antlr2.version>
    <commons-dbcp2.version>2.8.0</commons-dbcp2.version>
    <commons-lang3.version>3.12.0</commons-lang3.version>
    <commons-pool.version>1.6</commons-pool.version>
    <commons-pool2.version>2.9.0</commons-pool2.version>
    <couchbase-client.version>3.1.6</couchbase-client.version>
    <db2-jdbc.version>11.5.5.0</db2-jdbc.version>
    <dependency-management-plugin.version>1.0.11.RELEASE</dependency-management-plugin.version>
    <derby.version>10.14.2.0</derby.version>
    <dropwizard-metrics.version>4.1.24</dropwizard-metrics.version>
    <ehcache.version>2.10.9.2</ehcache.version>
    <ehcache3.version>3.9.4</ehcache3.version>
    <elasticsearch.version>7.12.1</elasticsearch.version>
    <embedded-mongo.version>3.0.0</embedded-mongo.version>
    <flyway.version>7.7.3</flyway.version>
    <freemarker.version>2.3.31</freemarker.version>
    <git-commit-id-plugin.version>4.0.5</git-commit-id-plugin.version>
    <glassfish-el.version>3.0.3</glassfish-el.version>
    <glassfish-jaxb.version>2.3.4</glassfish-jaxb.version>
    <groovy.version>3.0.8</groovy.version>
</properties>
<!-- 在下面的dependencies中,去取用上面的版本號,以hibernate舉例 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${hibernate.version}</version>
</dependency>

以上可以看出,父工程中幾乎聲明瞭所有開發中用到的jar的版本號,稱為自動版本仲裁機制,也就是當前SpringBoot版本中的適配版本。

以後怎麼引入需要的依賴呢

比如想引入mysql,直接在pom.xml檔案中寫入

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
</dependencies>

可以在parent的parent工程中找到SpringBoot已經規定了版本號(仲裁)的mysql,所以不用寫版本號

重新整理後,mysql依賴就被匯入了。

同理,進入之前HelloWorld專案中的,可以看到,其實spring-boot-starter-web就是幫我們一次性匯入了web開發常用框架以及Tomcat伺服器。

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.5.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.5.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.5.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.8</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.8</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

那如果對他仲裁的版本號不滿意,比如想把MySQL8改為MySQL5,那怎麼辦呢?

未完待續