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

Java Maven 結(jié)合Spring 3 種框架設(shè)計(jì)架構(gòu)詳解

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

核心總覽

Maven 負(fù)責(zé)依賴管理、項(xiàng)目構(gòu)建、模塊化拆分,Spring(Boot)負(fù)責(zé)業(yè)務(wù)開發(fā),二者結(jié)合的架構(gòu)分為:

  1. 單模塊 Spring Boot 架構(gòu)(新手 / 小項(xiàng)目)
  2. 多模塊 單體 Spring Boot 架構(gòu)(中大型復(fù)雜后臺(tái),企業(yè)最常用)
  3. 微服務(wù) Spring Cloud 架構(gòu)(超大型分布式系統(tǒng))

一、單模塊 Spring Boot 架構(gòu)

1. 結(jié)構(gòu)(Maven + Spring)

spring-boot-demo  (1個(gè)Maven模塊)
├── pom.xml       (僅1個(gè)配置文件)
└── src
    └── 所有代碼(controller/service/dao) 都在這
  • Maven:?jiǎn)雾?xiàng)目、單 pom.xml,僅管理基礎(chǔ)依賴
  • Spring:?jiǎn)蝹€(gè) Spring Boot 應(yīng)用,一個(gè)啟動(dòng)類,一個(gè)打包文件

2. 核心特點(diǎn)

最簡(jiǎn)單的架構(gòu),所有代碼放在一個(gè)模塊里,不分層、不拆分,開箱即用。

3. 優(yōu)點(diǎn)

? 上手極快,零基礎(chǔ)可學(xué)? 開發(fā)效率最高,無需配置模塊化? Maven 打包 / 運(yùn)行最簡(jiǎn)單? 部署簡(jiǎn)單(直接運(yùn)行一個(gè) jar 包)

4. 缺點(diǎn)

? 項(xiàng)目變大后代碼臃腫、混亂? 代碼復(fù)用性差? 不適合多人協(xié)作開發(fā)? 無法拆分業(yè)務(wù)模塊

5. 適用場(chǎng)景

  • 學(xué)習(xí)練習(xí)、畢業(yè)設(shè)計(jì)
  • 小型后臺(tái)、簡(jiǎn)單管理系統(tǒng)
  • 快速原型開發(fā)

二、多模塊 單體 Spring Boot 架構(gòu)(?? 企業(yè)首選)

1. 結(jié)構(gòu)(Maven 父子工程 + 單 Spring Boot 應(yīng)用)

project-parent    (Maven父工程,無代碼,僅管理版本)
├── pom.xml
├── common        (公共模塊:工具類、常量)
├── dao           (數(shù)據(jù)訪問模塊:Mapper、實(shí)體)
├── service       (業(yè)務(wù)模塊:Service)
└── web           (Web模塊:Controller、啟動(dòng)類)
  • Maven父子模塊架構(gòu),父 pom 統(tǒng)一管理所有依賴版本,子模塊互相依賴
  • Spring依然是一個(gè) Spring Boot 項(xiàng)目(最終打包成一個(gè) jar),只是代碼拆分到多個(gè) Maven 模塊

2. 核心特點(diǎn)

  • 還是單體應(yīng)用(不拆分服務(wù))
  • 僅通過 Maven 拆分代碼模塊,實(shí)現(xiàn)業(yè)務(wù)解耦、代碼復(fù)用
  • 啟動(dòng)、部署和單模塊完全一樣

3. 優(yōu)點(diǎn)

? 適合中大型復(fù)雜后臺(tái)系統(tǒng)(你問的復(fù)雜系統(tǒng)首選)? 代碼分層解耦,結(jié)構(gòu)清晰,易維護(hù)? Maven 統(tǒng)一管理依賴,無版本沖突? 代碼復(fù)用性高(公共模塊抽離)? 多人協(xié)作開發(fā)無沖突? 部署簡(jiǎn)單(還是一個(gè) jar 包)

4. 缺點(diǎn)

? 比單模塊稍復(fù)雜,需要學(xué)習(xí) Maven 父子工程? 本質(zhì)還是單體,無法獨(dú)立擴(kuò)容、獨(dú)立部署

5. 適用場(chǎng)景

? 90% 企業(yè)級(jí)復(fù)雜后臺(tái)(OA、CRM、電商管理后臺(tái)、中臺(tái)系統(tǒng))? 多人團(tuán)隊(duì)開發(fā)? 業(yè)務(wù)復(fù)雜,但不需要分布式

三、微服務(wù) Spring Cloud 架構(gòu)

1. 結(jié)構(gòu)(Maven 父子工程 + 多個(gè) Spring Boot 服務(wù))

cloud-parent      (Maven父工程)
├── pom.xml
├── user-service  (用戶服務(wù):獨(dú)立SpringBoot)
├── order-service (訂單服務(wù):獨(dú)立SpringBoot)
├── product-service (商品服務(wù):獨(dú)立SpringBoot)
└── gateway       (網(wǎng)關(guān)服務(wù))
  • Maven:父子工程統(tǒng)一版本,每個(gè)服務(wù)是獨(dú)立的 Maven 模塊
  • Spring多個(gè)獨(dú)立的 Spring Boot 應(yīng)用,通過 Spring Cloud 遠(yuǎn)程調(diào)用

2. 核心特點(diǎn)

  • 按業(yè)務(wù)拆分成獨(dú)立服務(wù)
  • 每個(gè)服務(wù)獨(dú)立開發(fā)、獨(dú)立部署、獨(dú)立擴(kuò)容
  • 分布式架構(gòu)

3. 優(yōu)點(diǎn)

? 高并發(fā)、高可用、故障隔離(一個(gè)服務(wù)掛了不影響全局)? 支持億級(jí)用戶、大型分布式系統(tǒng)? 團(tuán)隊(duì)并行開發(fā),每個(gè)團(tuán)隊(duì)負(fù)責(zé)一個(gè)服務(wù)? 靈活擴(kuò)容(訂單壓力大,只擴(kuò)容訂單服務(wù))

4. 缺點(diǎn)

? 架構(gòu)極復(fù)雜,學(xué)習(xí)成本高? 運(yùn)維難度大(需要服務(wù)器、中間件)? 出現(xiàn)分布式問題(事務(wù)、鏈路追蹤)? 新手很難上手

5. 適用場(chǎng)景

? 超大型互聯(lián)網(wǎng)項(xiàng)目(淘寶、京東、抖音后臺(tái))? 高并發(fā)、分布式、多團(tuán)隊(duì)協(xié)作

四、補(bǔ)充:過時(shí)架構(gòu)(原生 Spring + Maven)

結(jié)構(gòu)

無 Spring Boot,純 Spring + Spring MVC + Maven,手動(dòng)寫 XML 配置

特點(diǎn)

配置繁瑣、部署麻煩、開發(fā)效率低

現(xiàn)狀

企業(yè)已完全淘汰,僅用于學(xué)習(xí)底層原理

五、三種架構(gòu) 終極對(duì)比表

表格

架構(gòu)Maven 形態(tài)Spring 形態(tài)優(yōu)點(diǎn)缺點(diǎn)適用項(xiàng)目
單模塊單模塊單個(gè) SpringBoot最簡(jiǎn)單、最快代碼亂、難維護(hù)小項(xiàng)目 / 學(xué)習(xí)
多模塊單體父子工程單個(gè) SpringBoot解耦、易維護(hù)、企業(yè)標(biāo)準(zhǔn)稍復(fù)雜、無法擴(kuò)容復(fù)雜后臺(tái)(首選)
微服務(wù)父子工程多個(gè) SpringBoot高可用、分布式極復(fù)雜、運(yùn)維難超大型互聯(lián)網(wǎng)項(xià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.清理父工程(關(guān)鍵)

  1. 進(jìn)入文件夾: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)建子模塊后自動(dò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è)務(wù)依賴(公共工具)

dao模塊中的pom添加 common依賴

service模塊的pom添加 dao依賴

6.配置web模塊(啟動(dòng)入口)

添加 web 依賴 + 打包插件

web目錄下的pom 增加:

<!-- 核心依賴 -->
    <dependencies>
        <!-- 依賴業(yè)務(wù)層 service -->
        <dependency>
            <groupId>com.mymulti</groupId>
            <artifactId>service</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!-- SpringBoot Web 核心(接口、服務(wù)器) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <!-- SpringBoot 打包插件(唯一啟動(dòng)模塊需要) -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

編譯: mvn clean install -U

啟動(dòng):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è)務(wù)

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 模塊 → 公共實(shí)體

package com.mymulti.entity;
public class User {
    private Long id;
    private String username;
    // getter/setter
}

八.相關(guān)問題

1.模塊間在pom里面聲明依賴有什么作用

模塊間在pom.xml聲明依賴 =告訴 Maven:我這個(gè)模塊,要使用另一個(gè)模塊的代碼!

如果不聲明,你根本調(diào)用不了其他模塊的類,編譯直接報(bào)錯(cuò)!

舉例:

common中定義的類:common/src/main/java/com/mymulti/entity/User.java

package com.mymulti.entity;
/**
 * 公共實(shí)體類(放在 common 模塊,所有模塊都能用)
 * 對(duì)應(yīng)數(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中調(diào)用

dao/src/main/java/com/mymulti/mapper/UserMapper.java

package com.mymulti.mapper;
import com.mymulti.entity.User; // 直接導(dǎo)入 common 模塊的類
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
 * DAO 層:數(shù)據(jù)庫操作
 * 直接使用了 common 中的 User 實(shí)體類
 */
public interface UserMapper {
    // 查詢所有用戶 → 返回的是 common 里的 User 對(duì)象
    @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 個(gè)條件,非 web 模塊也能寫接口:

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

到此這篇關(guān)于Java Maven 結(jié)合Spring 3 種框架設(shè)計(jì)架構(gòu)詳解的文章就介紹到這了,更多相關(guān)java maven spring內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

    Maven安裝與配置圖文教程

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

    Java 反射獲取類詳細(xì)信息的常用方法總結(jié)

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

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

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

    南昌市| 通榆县| 青龙| 澄迈县| 林甸县| 双城市| 济阳县| 太仓市| 诸暨市| 大理市| 东安县| 灵川县| 远安县| 新乡县| 永安市| 新乡县| 深圳市| 宁城县| 甘孜县| 青阳县| 墨玉县| 涪陵区| 循化| 仙桃市| 泰兴市| 石渠县| 贵州省| 邛崃市| 黔南| 武川县| 永昌县| 新竹市| 闽侯县| 靖州| 布尔津县| 江口县| 三穗县| 攀枝花市| 汝阳县| 珠海市| 文化|