1. 場景描述
先介紹下背景,專案為什麼需要用多模組?springmvc難道還不夠?
(1)設計模式真言:“高內聚、低耦合”,springmvc專案,一般會把專案分成多個包:controller、service、dao、util等,但是隨著專案的複雜性提高,想複用其他一個模組的話,因為是包的形式,剝離出來會比較困難,耦合性有點強,常用的方法就是複製程式碼修改,但是這樣會做很多無用功與增加出錯機率。
(2)springboot多模組簡單來說,就是把按包分模組的模式,藉助maven升級到jar的方式,抽象性更加強了,假如jar再升級到到war或者多個集合jar,就成微服務了(springcloud入門系列),在多模組jar模式下可以將某個jar拿出來對外共用,能大大提高程式碼複用率與開發效率。
2. 解決方案
2.1 整體思路
(1)新建springboot專案;
(2)在新建後的springboot專案中新建多個module;
(3)修改pom檔案以及刪除多餘的檔案及資料夾。
2.2 新建springboot專案(springboot專案快速搭建)
(1)new->project
(2)next,名字改一下。
2.3 新建module
(1)在springboot專案上點選右鍵->new->module
其餘方式跟上面的springboot方式一樣,不再多說了。
(2)新建三個module:controller、service、dao,新建後的效果圖如下:
2.4 刪除多餘的檔案及修改配置檔案(重點)
2.4.1 刪除多餘檔案及資料夾
(1)springboot專案
整體刪除src資料夾。
(2)module模組
將service和dao下面的application啟動類和對應配置檔案application.yml/prpperty,一起刪除了,cotroller模組的不動。
2.4.2 修改pom.xml
根據springmvc架構,幾個module之間依賴順序 controller->service->dao
(1)修改springboot最外層pom.xml
這個是父pom.xml,用於載入一些全域性的或者公共的jar包,以及配置打包。
此pom檔案中,需要需改兩個地方:
一是修改打包模式為pom;
二是新建modules標籤,將3個module增加進來。
如下:
<packaging>pom</packaging>
<modules>
<module>controller</module>
<module>service</module>
<module>dao</module>
</modules>
(2)修改cotroller的pom.xml檔案
修改
<!--<parent>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-parent</artifactId>-->
<!--<version>2.1.6.RELEASE</version>-->
<!--<relativePath/> <!– lookup parent from repository –>-->
<!--</parent>-->
<parent>
<groupId>com.laowang</groupId>
<artifactId>lwmodul</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>com.laowang</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(3)修改service的pom.xml檔案
與controller類似,只是依賴改為dao。
<!--<parent>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-parent</artifactId>-->
<!--<version>2.1.6.RELEASE</version>-->
<!--<relativePath/> <!– lookup parent from repository –>-->
<!--</parent>-->
<parent>
<groupId>com.laowang</groupId>
<artifactId>lwmodul</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependency>
<groupId>com.laowang</groupId>
<artifactId>dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(4)修改dao的pom.xml檔案
只需修改parent,不需要再配置依賴了。
<!--<parent>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-parent</artifactId>-->
<!--<version>2.1.6.RELEASE</version>-->
<!--<relativePath/> <!– lookup parent from repository –>-->
<!--</parent>-->
<parent>
<groupId>com.laowang</groupId>
<artifactId>lwmodul</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
(5)啟動
在Cotroller模組中使用啟動類ControllerApplication啟動,空專案的話,看到這一行就說明成功了。
Started ControllerApplication in 2.485 seconds (JVM running for 3.639)
2.5 增加web訪問驗證
2.5.1 配置檔案
(1)controller下面的application.property改下埠號(不更改的話預設是:8080)。
server.port=9000
(2)增加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.5.2 啟動類
在啟動類ControllerApplication增加一個標籤(@RestController)和一個請求方法(home())。
package com.laowang.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class ControllerApplication {
public static void main(String[] args) {
SpringApplication.run(ControllerApplication.class, args);
}
@RequestMapping("/")
public String home() {
return "i'm 軟體老王,歡迎光臨!";
}
}
2.5.3 效果圖
I'm 軟體老王,如果覺得還可以的話,關注下唄!如有不準確或疑問的地方,可通過討論區、QQ溝通,多謝!