Java Maven 結合Spring 3 種框架設計架構詳解
核心總覽
Maven 負責依賴管理、項目構建、模塊化拆分,Spring(Boot)負責業(yè)務開發(fā),二者結合的架構分為:
- 單模塊 Spring Boot 架構(新手 / 小項目)
- 多模塊 單體 Spring Boot 架構(中大型復雜后臺,企業(yè)最常用)
- 微服務 Spring Cloud 架構(超大型分布式系統(tǒng))
一、單模塊 Spring Boot 架構
1. 結構(Maven + Spring)
spring-boot-demo (1個Maven模塊)
├── pom.xml (僅1個配置文件)
└── src
└── 所有代碼(controller/service/dao) 都在這- Maven:單項目、單
pom.xml,僅管理基礎依賴 - Spring:單個 Spring Boot 應用,一個啟動類,一個打包文件
2. 核心特點
最簡單的架構,所有代碼放在一個模塊里,不分層、不拆分,開箱即用。
3. 優(yōu)點
? 上手極快,零基礎可學? 開發(fā)效率最高,無需配置模塊化? Maven 打包 / 運行最簡單? 部署簡單(直接運行一個 jar 包)
4. 缺點
? 項目變大后代碼臃腫、混亂? 代碼復用性差? 不適合多人協(xié)作開發(fā)? 無法拆分業(yè)務模塊
5. 適用場景
- 學習練習、畢業(yè)設計
- 小型后臺、簡單管理系統(tǒng)
- 快速原型開發(fā)
二、多模塊 單體 Spring Boot 架構(?? 企業(yè)首選)
1. 結構(Maven 父子工程 + 單 Spring Boot 應用)
project-parent (Maven父工程,無代碼,僅管理版本) ├── pom.xml ├── common (公共模塊:工具類、常量) ├── dao (數(shù)據(jù)訪問模塊:Mapper、實體) ├── service (業(yè)務模塊:Service) └── web (Web模塊:Controller、啟動類)
- Maven:父子模塊架構,父
pom統(tǒng)一管理所有依賴版本,子模塊互相依賴 - Spring:依然是一個 Spring Boot 項目(最終打包成一個 jar),只是代碼拆分到多個 Maven 模塊
2. 核心特點
- 還是單體應用(不拆分服務)
- 僅通過 Maven 拆分代碼模塊,實現(xiàn)業(yè)務解耦、代碼復用
- 啟動、部署和單模塊完全一樣
3. 優(yōu)點
? 適合中大型復雜后臺系統(tǒng)(你問的復雜系統(tǒng)首選)? 代碼分層解耦,結構清晰,易維護? Maven 統(tǒng)一管理依賴,無版本沖突? 代碼復用性高(公共模塊抽離)? 多人協(xié)作開發(fā)無沖突? 部署簡單(還是一個 jar 包)
4. 缺點
? 比單模塊稍復雜,需要學習 Maven 父子工程? 本質還是單體,無法獨立擴容、獨立部署
5. 適用場景
? 90% 企業(yè)級復雜后臺(OA、CRM、電商管理后臺、中臺系統(tǒng))? 多人團隊開發(fā)? 業(yè)務復雜,但不需要分布式
三、微服務 Spring Cloud 架構
1. 結構(Maven 父子工程 + 多個 Spring Boot 服務)
cloud-parent (Maven父工程) ├── pom.xml ├── user-service (用戶服務:獨立SpringBoot) ├── order-service (訂單服務:獨立SpringBoot) ├── product-service (商品服務:獨立SpringBoot) └── gateway (網(wǎng)關服務)
- Maven:父子工程統(tǒng)一版本,每個服務是獨立的 Maven 模塊
- Spring:多個獨立的 Spring Boot 應用,通過 Spring Cloud 遠程調用
2. 核心特點
- 按業(yè)務拆分成獨立服務
- 每個服務獨立開發(fā)、獨立部署、獨立擴容
- 分布式架構
3. 優(yōu)點
? 高并發(fā)、高可用、故障隔離(一個服務掛了不影響全局)? 支持億級用戶、大型分布式系統(tǒng)? 團隊并行開發(fā),每個團隊負責一個服務? 靈活擴容(訂單壓力大,只擴容訂單服務)
4. 缺點
? 架構極復雜,學習成本高? 運維難度大(需要服務器、中間件)? 出現(xiàn)分布式問題(事務、鏈路追蹤)? 新手很難上手
5. 適用場景
? 超大型互聯(lián)網(wǎng)項目(淘寶、京東、抖音后臺)? 高并發(fā)、分布式、多團隊協(xié)作
四、補充:過時架構(原生 Spring + Maven)
結構
無 Spring Boot,純 Spring + Spring MVC + Maven,手動寫 XML 配置
特點
配置繁瑣、部署麻煩、開發(fā)效率低
現(xiàn)狀
企業(yè)已完全淘汰,僅用于學習底層原理
五、三種架構 終極對比表
表格
| 架構 | Maven 形態(tài) | Spring 形態(tài) | 優(yōu)點 | 缺點 | 適用項目 |
|---|---|---|---|---|---|
| 單模塊 | 單模塊 | 單個 SpringBoot | 最簡單、最快 | 代碼亂、難維護 | 小項目 / 學習 |
| 多模塊單體 | 父子工程 | 單個 SpringBoot | 解耦、易維護、企業(yè)標準 | 稍復雜、無法擴容 | 復雜后臺(首選) |
| 微服務 | 父子工程 | 多個 SpringBoot | 高可用、分布式 | 極復雜、運維難 | 超大型互聯(lián)網(wǎng)項目 |
六、創(chuàng)建多模塊醒目流程
1.命令(同單模塊)
mvn archetype:generate -DgroupId=com.mymulti -DartifactId=spring-boot-mymulti -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
2.清理父工程(關鍵)
- 進入文件夾:
cd spring-boot-mymulti - 直接刪除
src文件夾(父工程不需要代碼,只需要pom.xml)
3.替換pom文件
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- SpringBoot 父依賴 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.15</version>
<relativePath/>
</parent>
<groupId>com.mymulti</groupId>
<artifactId>spring-boot-mymulti</artifactId>
<version>1.0.0</version>
<!-- ? 父工程必須是 pom 打包 -->
<packaging>pom</packaging>
<!-- 子模塊列表(創(chuàng)建子模塊后自動生成) -->
<modules>
</modules>
<properties>
<java.version>1.8</java.version>
</properties>
</project>4.創(chuàng)建子模塊
在 spring-boot-multi 目錄下,依次執(zhí)行:
# common模塊 mvn archetype:generate -DgroupId=com.multi -DartifactId=common -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false # dao模塊 mvn archetype:generate -DgroupId=com.multi -DartifactId=dao -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false # service模塊 mvn archetype:generate -DgroupId=com.multi -DartifactId=service -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false # web模塊 mvn archetype:generate -DgroupId=com.multi -DartifactId=web -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
5.添加模塊間依賴
web 模塊 → 依賴 service,mservice 模塊 → 依賴 dao,dao 模塊 → 依賴 common,common 模塊 → 無業(yè)務依賴(公共工具)
dao模塊中的pom添加 common依賴

service模塊的pom添加 dao依賴

6.配置web模塊(啟動入口)
添加 web 依賴 + 打包插件
web目錄下的pom 增加:
<!-- 核心依賴 -->
<dependencies>
<!-- 依賴業(yè)務層 service -->
<dependency>
<groupId>com.mymulti</groupId>
<artifactId>service</artifactId>
<version>1.0.0</version>
</dependency>
<!-- SpringBoot Web 核心(接口、服務器) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- SpringBoot 打包插件(唯一啟動模塊需要) -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>編譯: mvn clean install -U
啟動:mvn spring-boot:run
七.定義路由與訪問接口
1. web 模塊 → 定義 路由 + 接口(唯一入口)
com.mymulti.controller.UserController
package com.mymulti.controller;
import com.mymulti.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 統(tǒng)一路由前綴 /user
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
// 路由:/user/get/1
@GetMapping("/get/{id}")
public Object getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
}2. service 模塊 → 處理業(yè)務
package com.mymulti.service;
import com.mymulti.dao.UserMapper;
import com.mymulti.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.selectById(id);
}
}3. dao 模塊 → 操作數(shù)據(jù)庫
package com.mymulti.dao;
import com.mymulti.entity.User;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("select * from user where id=#{id}")
User selectById(Long id);
}4. common 模塊 → 公共實體
package com.mymulti.entity;
public class User {
private Long id;
private String username;
// getter/setter
}八.相關問題
1.模塊間在pom里面聲明依賴有什么作用
模塊間在pom.xml聲明依賴 =告訴 Maven:我這個模塊,要使用另一個模塊的代碼!
如果不聲明,你根本調用不了其他模塊的類,編譯直接報錯!
舉例:
common中定義的類:common/src/main/java/com/mymulti/entity/User.java
package com.mymulti.entity;
/**
* 公共實體類(放在 common 模塊,所有模塊都能用)
* 對應數(shù)據(jù)庫 user 表
*/
public class User {
private Long id;
private String username;
private String password;
// getter/setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}dao中調用
dao/src/main/java/com/mymulti/mapper/UserMapper.java
package com.mymulti.mapper;
import com.mymulti.entity.User; // 直接導入 common 模塊的類
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* DAO 層:數(shù)據(jù)庫操作
* 直接使用了 common 中的 User 實體類
*/
public interface UserMapper {
// 查詢所有用戶 → 返回的是 common 里的 User 對象
@Select("select id, username, password from user")
List<User> findAll();
// 根據(jù)ID查詢用戶
@Select("select * from user where id = #{id}")
User findById(Long id);
}2.除了在web模塊定義路由與訪問接口 其他模塊可以自己定義嗎
service / dao / 任意模塊,都能寫 @RestController、寫路由接口,能正常訪問。
全局掃描所有模塊只要滿足 2 個條件,非 web 模塊也能寫接口:
- 該模塊間接 / 直接包含
spring-web依賴(你的項目里都傳遞進來了) - 類上打
@RestController/@Controller
到此這篇關于Java Maven 結合Spring 3 種框架設計架構詳解的文章就介紹到這了,更多相關java maven spring內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- JavaSpring?boot配置JDK和MAVEN開發(fā)環(huán)境詳解
- IDEA實現(xiàn)純java項目并打包jar的步驟(不使用Maven,Spring)
- 解析JAVA中 maven pom.xml 和 properties 配置文件、spring 配置文件及環(huán)境變量的關系
- spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理分析
- Java?Spring?boot?配置JDK和MAVEN開發(fā)環(huán)境的過程
- SpringBoot Maven打包失敗報:class lombok.javac.apt.LombokProcessor錯誤的解決辦法
- Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)
相關文章
springboot?vue項目管理前后端實現(xiàn)編輯功能
這篇文章主要為大家介紹了springboot?vue項目管理前后端實現(xiàn)編輯功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
Java Idea TranslationPlugin翻譯插件使用解析
這篇文章主要介紹了Java Idea TranslationPlugin翻譯插件使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
Spring?Boot對接Oracle數(shù)據(jù)庫具體流程
這篇文章主要給大家介紹了關于Spring?Boot對接Oracle數(shù)據(jù)庫的具體流程,本文將介紹如何在Spring Boot中連接Oracle數(shù)據(jù)庫的基本配置,包括添加依賴、配置數(shù)據(jù)源、配置JPA等,需要的朋友可以參考下2023-11-11

