最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Maven 結合Spring 3 種框架設計架構詳解

 更新時間:2026年04月29日 09:35:28   作者:python開發(fā)筆記  
文章講述了Maven和Spring(Boot)結合的三種架構:單模塊SpringBoot架構、多模塊單體SpringBoot架構和微服務SpringCloud架構,分別介紹了每種架構的特點、優(yōu)點、缺點和適用場景,最后描述了創(chuàng)建多模塊架構的步驟和定義路由與訪問接口的方法,感興趣的朋友跟隨小編一起看看吧

核心總覽

Maven 負責依賴管理、項目構建、模塊化拆分,Spring(Boot)負責業(yè)務開發(fā),二者結合的架構分為:

  1. 單模塊 Spring Boot 架構(新手 / 小項目)
  2. 多模塊 單體 Spring Boot 架構(中大型復雜后臺,企業(yè)最常用)
  3. 微服務 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.清理父工程(關鍵)

  1. 進入文件夾:cd spring-boot-mymulti
  2. 直接刪除 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 模塊也能寫接口:

  1. 該模塊間接 / 直接包含 spring-web 依賴(你的項目里都傳遞進來了)
  2. 類上打 @RestController / @Controller

到此這篇關于Java Maven 結合Spring 3 種框架設計架構詳解的文章就介紹到這了,更多相關java maven spring內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot?vue項目管理前后端實現(xiàn)編輯功能

    springboot?vue項目管理前后端實現(xiàn)編輯功能

    這篇文章主要為大家介紹了springboot?vue項目管理前后端實現(xiàn)編輯功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java Idea TranslationPlugin翻譯插件使用解析

    Java Idea TranslationPlugin翻譯插件使用解析

    這篇文章主要介紹了Java Idea TranslationPlugin翻譯插件使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • java多線程實現(xiàn)文件下載功能

    java多線程實現(xiàn)文件下載功能

    這篇文章主要介紹了java多線程實現(xiàn)文件下載功能的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JAVA算法起步之堆排序實例

    JAVA算法起步之堆排序實例

    這篇文章主要介紹了JAVA算法起步之堆排序實例,需要的朋友可以參考下
    2014-02-02
  • Java swing五子棋的實現(xiàn)方法

    Java swing五子棋的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了Java swing五子棋的實現(xiàn)方法,Java開發(fā)圖形界面程序五子棋的實現(xiàn)方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring?Boot對接Oracle數(shù)據(jù)庫具體流程

    Spring?Boot對接Oracle數(shù)據(jù)庫具體流程

    這篇文章主要給大家介紹了關于Spring?Boot對接Oracle數(shù)據(jù)庫的具體流程,本文將介紹如何在Spring Boot中連接Oracle數(shù)據(jù)庫的基本配置,包括添加依賴、配置數(shù)據(jù)源、配置JPA等,需要的朋友可以參考下
    2023-11-11
  • java實現(xiàn)jframe透明窗體示例

    java實現(xiàn)jframe透明窗體示例

    這篇文章主要介紹了java實現(xiàn)jframe透明窗體示例,需要的朋友可以參考下
    2014-03-03
  • Maven安裝與配置圖文教程

    Maven安裝與配置圖文教程

    這篇文章主要為大家詳細介紹了Maven安裝與配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java 反射獲取類詳細信息的常用方法總結

    Java 反射獲取類詳細信息的常用方法總結

    Java 反射獲取類詳細信息的常用方法總結,需要的朋友可以參考一下
    2013-03-03
  • springBoot整合redis做緩存具體操作步驟

    springBoot整合redis做緩存具體操作步驟

    緩存主要是將數(shù)據(jù)存在計算機的內存當中,以便于在使用的時候是可以實現(xiàn)快速讀取使用,它的快也是相對于硬盤讀取而言,這篇文章主要給大家介紹了關于springBoot整合redis做緩存的具體操作步驟,需要的朋友可以參考下
    2024-04-04

最新評論

蓬莱市| 金湖县| 丘北县| 临洮县| 全南县| 西乌珠穆沁旗| 永新县| 蒲城县| 大余县| 灵川县| 安康市| 嘉定区| 土默特右旗| 广宁县| 芜湖县| 象州县| 汕尾市| 泰和县| 辽阳县| 宁都县| 新宾| 太保市| 黄骅市| 安仁县| 枝江市| 稷山县| 嘉峪关市| 海晏县| 信丰县| 吉木乃县| 依安县| 霍城县| 武汉市| 都江堰市| 于都县| 湖南省| 健康| 焦作市| 米脂县| 永嘉县| 紫金县|