spring相關(guān)框架及基本目錄詳解
一、單體 Spring Boot 工程
單工程、單可執(zhí)行 Jar 包,所有業(yè)務(wù)邏輯、配置、依賴都集中在一個(gè)工程內(nèi),無需模塊拆分,開發(fā)和部署成本低,適合中小型 CRUD 項(xiàng)目、快速原型開發(fā)。
一、接收類的核心存放目錄
1. 基礎(chǔ)目錄結(jié)構(gòu)(單項(xiàng)目)
接收類統(tǒng)一放在根包下的dto目錄,且建議再細(xì)分req(request,接收類)和resp(response,響應(yīng)類)子目錄,結(jié)構(gòu)如下:
demo-boot-single/ # 項(xiàng)目根目錄 ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/demo/ # 根包(啟動(dòng)類必須在此) │ │ │ ├── DemoApplication.java # 唯一啟動(dòng)類(核心入口) │ │ │ ├── controller/ # 接口層:接收前端請求 │ │ │ │ ├── UserController.java │ │ │ │ └── OrderController.java │ │ │ ├── service/ # 業(yè)務(wù)層接口:定義業(yè)務(wù)方法 │ │ │ │ ├── UserService.java │ │ │ │ └── OrderService.java │ │ │ ├── service/impl/ # 業(yè)務(wù)層實(shí)現(xiàn):核心業(yè)務(wù)邏輯 │ │ │ │ ├── UserServiceImpl.java │ │ │ │ └── OrderServiceImpl.java │ │ │ ├── mapper/ # 數(shù)據(jù)訪問層:對接數(shù)據(jù)庫 │ │ │ │ ├── UserMapper.java │ │ │ │ └── OrderMapper.java │ │ │ ├── entity/ # 實(shí)體層:映射數(shù)據(jù)庫表 │ │ │ │ ├── User.java │ │ │ │ └── Order.java │ │ │ ├── dto/ # 數(shù)據(jù)傳輸對象:封裝入?yún)?出參 │ │ │ │ ├── req/ # 請求DTO:接收前端參數(shù) │ │ │ │ │ ├── UserAddReqDTO.java │ │ │ │ │ └── OrderQueryReqDTO.java │ │ │ │ └── resp/ # 響應(yīng)DTO:返回前端數(shù)據(jù) │ │ │ │ ├── UserInfoRespDTO.java │ │ │ │ └── OrderListRespDTO.java │ │ │ ├── config/ # 配置層:自定義Bean/框架配置 │ │ │ │ ├── MyBatisConfig.java │ │ │ │ └── RedisConfig.java │ │ │ ├── constant/ # 常量層:枚舉/固定值 │ │ │ │ ├── CommonConstant.java │ │ │ │ └── UserStatusEnum.java │ │ │ ├── exception/ # 異常層:自定義異常+全局處理 │ │ │ │ ├── BusinessException.java │ │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── interceptor/ # 攔截器:登錄校驗(yàn)/日志 │ │ │ │ └── LoginInterceptor.java │ │ │ └── util/ # 工具層:通用輔助方法 │ │ │ ├── DateUtil.java │ │ │ └── HttpUtil.java │ │ └── resources/ # 資源目錄 │ │ ├── application.yml # 核心配置文件(端口/數(shù)據(jù)庫/Redis) │ │ ├── application-dev.yml # 開發(fā)環(huán)境配置 │ │ ├── application-prod.yml # 生產(chǎn)環(huán)境配置 │ │ ├── mapper/ # MyBatis XML映射文件 │ │ │ ├── UserMapper.xml │ │ │ └── OrderMapper.xml │ │ ├── static/ # 靜態(tài)資源(CSS/JS/圖片,可選) │ │ ├── templates/ # 視圖模板(Thymeleaf,可選) │ │ └── db/ # 數(shù)據(jù)庫腳本 │ │ ├── schema.sql # 建表語句 │ │ └── data.sql # 初始化數(shù)據(jù) │ └── test/ # 測試目錄(和main結(jié)構(gòu)一致) │ └── java/com/example/demo/ │ ├── controller/ │ │ └── UserControllerTest.java │ ├── service/ │ │ └── UserServiceTest.java │ └── DemoApplicationTests.java ├── pom.xml # Maven依賴(所有依賴集中在此) ├── README.md # 項(xiàng)目說明 └── .gitignore # Git忽略文件
2. 按業(yè)務(wù)模塊細(xì)分(復(fù)雜單項(xiàng)目)
如果項(xiàng)目業(yè)務(wù)模塊多(如用戶、訂單、商品),可在req下再按模塊拆分,更易維護(hù):
plaintext
dto/
├── req/
│ ├── user/ # 用戶模塊接收類
│ │ ├── UserAddReqDTO.java
│ │ └── UserLoginReqDTO.java
│ ├── order/ # 訂單模塊接收類
│ │ ├── OrderCreateReqDTO.java
│ │ └── OrderCancelReqDTO.java
│ └── ai/ # AI模塊接收類
│ └── ChatReqDTO.java
└── resp/
├── user/
└── order/二、接收類的命名規(guī)范(必遵循)
接收類的命名要直觀體現(xiàn) “業(yè)務(wù) + 操作 + 類型”,讓開發(fā)者一眼知道用途:
表格
場景 | 命名規(guī)則 | 示例 |
新增接口接收類 | 模塊名 + Add + ReqDTO | UserAddReqDTO 、OrderAddReqDTO |
修改接口接收類 | 模塊名 + Update + ReqDTO | UserUpdateReqDTO |
查詢接口接收類 | 模塊名 + Query + ReqDTO | OrderQueryReqDTO 、UserPageReqDTO |
登錄 / 特殊操作接收類 | 模塊名 + 操作 + ReqDTO | UserLoginReqDTO 、ChatSendReqDTO |
三、關(guān)鍵注意事項(xiàng)(避坑)
禁止直接用實(shí)體類做接收類:
- 實(shí)體類(
entity/User.java)是數(shù)據(jù)庫表的映射,包含主鍵、創(chuàng)建時(shí)間等前端無需傳遞的字段,直接接收會暴露數(shù)據(jù)庫結(jié)構(gòu),且易引發(fā)參數(shù)安全問題; - 示例:前端僅需傳
username/password,但實(shí)體類有id/createTime,用實(shí)體類接收會導(dǎo)致這些字段被前端隨意賦值。
簡單場景的簡化方案:
- 極小項(xiàng)目(僅 1-2 個(gè)接口):可臨時(shí)用
@RequestParam單個(gè)接收參數(shù),無需創(chuàng)建接收類; - 中等項(xiàng)目:至少拆分
req/resp,避免接收 / 響應(yīng)類混放。
接收類的使用示例:在 Controller 中調(diào)用接收類,語義清晰:java運(yùn)行
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/add")
// 直接接收封裝好的接收類
public Result<?> addUser(@RequestBody UserAddReqDTO userAddReqDTO) {
userService.addUser(userAddReqDTO);
return Result.success();
}
}特殊接收類的處理:
- 文件上傳接收類:可單獨(dú)放在
dto/req/file/下,如FileUploadReqDTO.java; - 分頁通用接收類:可放在
dto/req/common/下,如PageReqDTO.java,供所有模塊復(fù)用。
總結(jié):
- 核心位置:后端接收類統(tǒng)一放在
dto/req/目錄下,按業(yè)務(wù)模塊(如user/order)細(xì)分; - 命名規(guī)范:模塊名 + 操作 + ReqDTO(如
UserAddReqDTO),直觀體現(xiàn)用途; - 核心原則:接收類和實(shí)體類、響應(yīng)類嚴(yán)格區(qū)分,禁止用實(shí)體類直接接收前端參數(shù)。
二、Spring Boot 父子工程
本質(zhì)還是單體工程(最終打包為一個(gè) Jar),但在代碼層面拆分為 “父工程 + 子模塊”,將通用代碼(工具、異常、常量)抽離為獨(dú)立子模塊,業(yè)務(wù)代碼保留在另一個(gè)子模塊,提升代碼復(fù)用性和維護(hù)性,適合中等規(guī)模、需要代碼分層管理的項(xiàng)目。
一、父子工程整體結(jié)構(gòu)(核心:公共模塊獨(dú)立,業(yè)務(wù)模塊保留)
demo-boot-parent/ # 父工程(僅管理依賴版本,無業(yè)務(wù)代碼) ├── pom.xml # 父POM:統(tǒng)一管理所有子模塊的依賴版本 ├── demo-common/ # 子模塊1:通用模塊(所有業(yè)務(wù)復(fù)用) │ ├── pom.xml │ └── src/main/java/com/example/demo/common/ │ ├── constant/ # 通用常量/枚舉 │ │ ├── CommonConstant.java │ │ └── UserStatusEnum.java │ ├── exception/ # 通用異常/全局處理器 │ │ ├── BusinessException.java │ │ └── GlobalExceptionHandler.java │ ├── interceptor/ # 通用攔截器 │ │ └── LoginInterceptor.java │ ├── util/ # 通用工具類 │ │ ├── DateUtil.java │ │ └── HttpUtil.java │ └── config/ # 通用配置(跨域/Redis) │ └── RedisConfig.java └── demo-business/ # 子模塊2:業(yè)務(wù)核心模塊(僅此處有啟動(dòng)類) ├── pom.xml # 依賴demo-common子模塊 └── src/ ├── main/ │ ├── java/com/example/demo/ │ │ ├── DemoApplication.java # 唯一啟動(dòng)類 │ │ ├── controller/ # 業(yè)務(wù)控制器 │ │ │ ├── UserController.java │ │ │ └── OrderController.java │ │ ├── service/ # 業(yè)務(wù)服務(wù)接口 │ │ │ ├── UserService.java │ │ │ └── OrderService.java │ │ ├── service/impl/ # 業(yè)務(wù)服務(wù)實(shí)現(xiàn) │ │ │ ├── UserServiceImpl.java │ │ │ └── OrderServiceImpl.java │ │ ├── mapper/ # 業(yè)務(wù)數(shù)據(jù)訪問層 │ │ │ ├── UserMapper.java │ │ │ └── OrderMapper.java │ │ ├── entity/ # 業(yè)務(wù)實(shí)體 │ │ │ ├── User.java │ │ │ └── Order.java │ │ ├── dto/ # 業(yè)務(wù)DTO │ │ │ ├── req/ │ │ │ └── resp/ │ │ └── config/ # 業(yè)務(wù)專屬配置 │ │ └── MyBatisConfig.java │ └── resources/ # 業(yè)務(wù)資源 │ ├── application.yml │ ├── application-dev.yml │ ├── mapper/ │ │ ├── UserMapper.xml │ │ └── OrderMapper.xml │ └── db/ └── test/ # 業(yè)務(wù)測試目錄 └── java/com/example/demo/ ├── controller/ └── service/
二、核心工程職責(zé)說明(保證子工程獨(dú)立)
表格
工程名稱 | 核心職責(zé) | 獨(dú)立性說明 |
demo-springboot-parent | 僅作為父工程,無任何業(yè)務(wù)代碼,只在 pom.xml 中統(tǒng)一管理所有子工程的依賴版本(如 Spring Boot、MyBatis、Lombok 等) | 純依賴管理,不依賴任何子工程 |
demo-common | 存放所有公共、通用的代碼(常量、異常、工具、通用配置),無業(yè)務(wù)邏輯 | 獨(dú)立編譯、可單獨(dú)發(fā)布,被 demo-business 依賴,不依賴任何業(yè)務(wù)工程 |
demo-business | 存放核心業(yè)務(wù)代碼(控制器、服務(wù)、Mapper、實(shí)體、DTO)+ 唯一啟動(dòng)類 | 依賴 demo-common,是最終可運(yùn)行的工程,包含所有業(yè)務(wù)邏輯 |
三、關(guān)鍵配置要點(diǎn)(保證父子工程協(xié)同)
1. 父工程 pom.xml 核心內(nèi)容(統(tǒng)一依賴版本)
<?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>
<!-- 父工程坐標(biāo) -->
<groupId>com.example</groupId>
<artifactId>demo-springboot-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>demo-springboot-parent</name>
<!-- 子工程聲明 -->
<modules>
<module>demo-common</module>
<module>demo-business</module>
</modules>
<!-- 統(tǒng)一依賴版本管理 -->
<properties>
<spring.boot.version>3.2.0</spring.boot.version>
<mybatis.version>3.5.15</mybatis.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依賴版本鎖定 -->
<dependencyManagement>
<dependencies>
<!-- Spring Boot父依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 子工程依賴聲明 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>demo-common</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>2. demo-common 子工程 pom.xml(僅引入通用依賴)
<?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">
<parent>
<groupId>com.example</groupId>
<artifactId>demo-springboot-parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>demo-common</artifactId>
<packaging>jar</packaging>
<name>demo-common</name>
<!-- 僅引入通用依賴(無業(yè)務(wù)依賴) -->
<dependencies>
<!-- Spring Context(配置/Bean) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- Redis客戶端(通用配置) -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- Lombok(工具類簡化) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>3. demo-business 子工程 pom.xml(依賴 demo-common)
<?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">
<parent>
<groupId>com.example</groupId>
<artifactId>demo-springboot-parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>demo-business</artifactId>
<packaging>jar</packaging>
<name>demo-business</name>
<!-- 核心依賴:引入公共模塊 -->
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>demo-common</artifactId>
</dependency>
<!-- Spring Boot Web(控制器) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis(數(shù)據(jù)訪問) -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 數(shù)據(jù)庫驅(qū)動(dòng) -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<!-- 啟動(dòng)類配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.demo.DemoApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>四、關(guān)鍵注意事項(xiàng)(保證子工程獨(dú)立 & 可運(yùn)行)
- 包名規(guī)范:demo-common 的包名統(tǒng)一為
com.example.demo.common,demo-business 引用時(shí)需導(dǎo)入該包(如import com.example.demo.common.util.DateUtil); - 啟動(dòng)類位置:僅 demo-business 有啟動(dòng)類,且放在
com.example.demo根包下,確保能掃描到 demo-common 的 Bean(需在啟動(dòng)類加@ComponentScan(basePackages = "com.example.demo")); - 配置隔離:demo-common 僅放通用配置(如 Redis、WebMvc),業(yè)務(wù)專屬配置(如 MyBatis)放在 demo-business;
- 依賴隔離:demo-common 不引入任何業(yè)務(wù)依賴(如 MyBatis、數(shù)據(jù)庫驅(qū)動(dòng)),僅保留通用依賴,保證獨(dú)立性。
總結(jié):
- 拆分核心:將常量、異常、工具、通用配置抽離為獨(dú)立的 demo-common 子工程,業(yè)務(wù)代碼 + 啟動(dòng)類保留在 demo-business;
- 父子關(guān)系:父工程僅管理依賴版本,子工程獨(dú)立(demo-common 可單獨(dú)復(fù)用,demo-business 是唯一可運(yùn)行工程);
- 協(xié)同規(guī)則:demo-business 依賴 demo-common,demo-common 不依賴任何業(yè)務(wù)模塊,保證低耦合、高復(fù)用。
三、Spring Cloud 微服務(wù)工程
一、微服務(wù)整體目錄結(jié)構(gòu)(核心:按服務(wù)拆分,復(fù)用公共模塊)
demo-cloud/ # 微服務(wù)父工程(管理Spring Cloud版本)
├── pom.xml # 父POM:統(tǒng)一管理Spring Cloud/Spring Boot版本
├── demo-common/ # 公共模塊(所有服務(wù)復(fù)用)
│ ├── pom.xml
│ └── src/main/java/com/example/demo/common/
│ ├── constant/ # 全局常量
│ ├── exception/ # 全局異常
│ ├── util/ # 通用工具
│ ├── dto/ # 通用DTO(分頁/統(tǒng)一響應(yīng)體)
│ └── feign/ # Feign遠(yuǎn)程調(diào)用接口(供服務(wù)間調(diào)用)
│ └── UserFeignClient.java
├── demo-gateway/ # 網(wǎng)關(guān)服務(wù)(微服務(wù)統(tǒng)一入口)
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/com/example/demo/gateway/
│ │ │ ├── DemoGatewayApplication.java # 網(wǎng)關(guān)啟動(dòng)類
│ │ │ ├── config/ # 網(wǎng)關(guān)配置
│ │ │ │ └── GatewayConfig.java
│ │ │ └── filter/ # 網(wǎng)關(guān)過濾器(鑒權(quán)/限流)
│ │ │ └── AuthFilter.java
│ │ └── resources/
│ │ ├── application.yml # 網(wǎng)關(guān)配置(路由規(guī)則/Nacos地址)
│ │ └── application-dev.yml
│ └── test/
├── demo-user-service/ # 用戶微服務(wù)(獨(dú)立業(yè)務(wù))
│ ├── pom.xml # 依賴demo-common
│ └── src/
│ ├── main/
│ │ ├── java/com/example/demo/user/
│ │ │ ├── DemoUserApplication.java # 用戶服務(wù)啟動(dòng)類
│ │ │ ├── controller/ # 用戶接口
│ │ │ │ └── UserController.java
│ │ │ ├── service/ # 用戶業(yè)務(wù)
│ │ │ │ ├── UserService.java
│ │ │ │ └── impl/UserServiceImpl.java
│ │ │ ├── mapper/ # 用戶數(shù)據(jù)訪問
│ │ │ │ └── UserMapper.java
│ │ │ ├── entity/ # 用戶實(shí)體
│ │ │ │ └── User.java
│ │ │ ├── dto/ # 用戶DTO
│ │ │ │ ├── req/
│ │ │ │ └── resp/
│ │ │ └── feign/ # 對外暴露的Feign接口
│ │ │ └── UserFeignApi.java
│ │ └── resources/
│ │ ├── application.yml # 用戶服務(wù)配置(端口/數(shù)據(jù)庫/Nacos)
│ │ ├── application-dev.yml
│ │ └── mapper/
│ │ └── UserMapper.xml
│ └── test/
└── demo-order-service/ # 訂單微服務(wù)(獨(dú)立業(yè)務(wù))
├── pom.xml # 依賴demo-common + 引入user服務(wù)Feign
└── src/
├── main/
│ ├── java/com/example/demo/order/
│ │ ├── DemoOrderApplication.java # 訂單服務(wù)啟動(dòng)類
│ │ ├── controller/ # 訂單接口
│ │ │ └── OrderController.java
│ │ ├── service/ # 訂單業(yè)務(wù)(調(diào)用user Feign)
│ │ │ ├── OrderService.java
│ │ │ └── impl/OrderServiceImpl.java
│ │ ├── mapper/ # 訂單數(shù)據(jù)訪問
│ │ │ └── OrderMapper.java
│ │ ├── entity/ # 訂單實(shí)體
│ │ │ └── Order.java
│ │ └── dto/ # 訂單DTO
│ └── resources/
│ ├── application.yml # 訂單服務(wù)配置
│ └── application-dev.yml
└── test/2. 微服務(wù)啟動(dòng)類示例(用戶服務(wù))
package com.example.demo.user;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 用戶微服務(wù)啟動(dòng)類
* @EnableDiscoveryClient:注冊到服務(wù)注冊中心(Nacos/Eureka)
* @EnableFeignClients:開啟Feign遠(yuǎn)程調(diào)用
* @MapperScan:掃描Mapper接口
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.example.demo.common.feign")
@MapperScan("com.example.demo.user.mapper")
public class DemoUserApplication {
public static void main(String[] args) {
SpringApplication.run(DemoUserApplication.class, args);
}
}二、核心組件職責(zé)說明(微服務(wù)特有)
組件名稱 | 核心職責(zé) | 關(guān)鍵特點(diǎn) |
demo-common | 所有微服務(wù)的通用代碼,無業(yè)務(wù)邏輯 | 獨(dú)立 Jar 包,被網(wǎng)關(guān)、用戶、訂單等所有服務(wù)依賴 |
demo-gateway | 微服務(wù)入口,負(fù)責(zé)路由轉(zhuǎn)發(fā)、統(tǒng)一鑒權(quán)、跨域、限流 | 無業(yè)務(wù)代碼,僅處理網(wǎng)關(guān)相關(guān)邏輯 |
demo-user-service | 專注用戶業(yè)務(wù)(注冊、登錄、用戶信息管理) | 獨(dú)立數(shù)據(jù)庫,對外暴露 Feign 接口供訂單服務(wù)調(diào)用 |
demo-order-service | 專注訂單業(yè)務(wù)(創(chuàng)建訂單、查詢訂單、調(diào)用用戶服務(wù)查用戶信息) | 依賴用戶服務(wù) Feign,獨(dú)立數(shù)據(jù)庫 |
demo-ai-service | 專注 AI 業(yè)務(wù)(對話、向量檢索) | 無數(shù)據(jù)庫依賴,僅對接 AI 模型 |
三、單個(gè)微服務(wù)內(nèi)部分層(以用戶服務(wù)為例)
每個(gè)微服務(wù)內(nèi)部仍遵循 Spring Boot 單項(xiàng)目的分層規(guī)范,保證自身完整性:
demo-user-service/src/main/java/com/example/demo/user/ ├── DemoUserApplication.java # 微服務(wù)啟動(dòng)類(加@SpringBootApplication、@EnableDiscoveryClient) ├── controller/UserController.java # 用戶接口(僅處理用戶相關(guān)請求) ├── service/ │ ├── UserService.java # 用戶服務(wù)接口 │ └── impl/UserServiceImpl.java # 用戶服務(wù)實(shí)現(xiàn) ├── mapper/UserMapper.java # 用戶Mapper(對接user表) ├── entity/User.java # 用戶實(shí)體(僅映射user表) ├── dto/ │ ├── req/UserAddReqDTO.java # 用戶新增入?yún)? │ └── resp/UserInfoRespDTO.java # 用戶信息出參 ├── config/MyBatisConfig.java # 用戶服務(wù)專屬M(fèi)yBatis配置 └── feign/UserFeignClient.java # 對外暴露的Feign接口(供訂單服務(wù)調(diào)用)
四、微服務(wù)核心配置要點(diǎn)
一、微服務(wù)整體目錄結(jié)構(gòu)(核心:按服務(wù)拆分,復(fù)用公共模塊)
demo-microservice/ # 微服務(wù)父工程(僅管理依賴版本) ├── pom.xml # 父POM:統(tǒng)一管理Spring Cloud、各依賴版本 ├── demo-common/ # 公共通用模塊(所有微服務(wù)復(fù)用) │ ├── pom.xml │ └── src/main/java/com/example/demo/common/ │ ├── constant/ # 全局常量(如狀態(tài)碼、通用枚舉) │ ├── exception/ # 全局異常(業(yè)務(wù)異常、全局處理器) │ ├── util/ # 通用工具(日期、HTTP、Bean拷貝) │ ├── config/ # 通用配置(Redis、跨域、Feign配置) │ ├── dto/ # 通用DTO(分頁、統(tǒng)一響應(yīng)體) │ └── feign/ # Feign遠(yuǎn)程調(diào)用接口(給其他服務(wù)調(diào)用) ├── demo-gateway/ # 網(wǎng)關(guān)微服務(wù)(統(tǒng)一入口、路由、鑒權(quán)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/gateway/ │ │ │ ├── DemoGatewayApplication.java # 網(wǎng)關(guān)啟動(dòng)類 │ │ │ ├── config/ # 網(wǎng)關(guān)配置(路由、跨域、過濾器) │ │ │ ├── filter/ # 網(wǎng)關(guān)過濾器(token校驗(yàn)、日志) │ │ │ └── handler/ # 網(wǎng)關(guān)異常處理 │ │ └── resources/ │ │ ├── application.yml │ │ └── application-dev.yml │ └── test/ ├── demo-user-service/ # 用戶微服務(wù)(用戶相關(guān)業(yè)務(wù)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/user/ │ │ │ ├── DemoUserApplication.java # 用戶服務(wù)啟動(dòng)類 │ │ │ ├── controller/ # 用戶控制器(僅用戶接口) │ │ │ ├── service/ # 用戶服務(wù)層(接口+實(shí)現(xiàn)) │ │ │ ├── mapper/ # 用戶數(shù)據(jù)訪問層 │ │ │ ├── entity/ # 用戶實(shí)體(僅用戶相關(guān)表) │ │ │ ├── dto/ # 用戶DTO(入?yún)?出參) │ │ │ ├── config/ # 用戶服務(wù)專屬配置(MyBatis、MQ) │ │ │ └── feign/ # 對外暴露的Feign接口(供其他服務(wù)調(diào)用) │ │ └── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ └── mapper/ # 用戶Mapper.xml │ └── test/ ├── demo-order-service/ # 訂單微服務(wù)(訂單相關(guān)業(yè)務(wù)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/order/ │ │ │ ├── DemoOrderApplication.java # 訂單服務(wù)啟動(dòng)類 │ │ │ ├── controller/ # 訂單控制器 │ │ │ ├── service/ # 訂單服務(wù)層(含調(diào)用用戶服務(wù)Feign) │ │ │ ├── mapper/ # 訂單數(shù)據(jù)訪問層 │ │ │ ├── entity/ # 訂單實(shí)體 │ │ │ ├── dto/ # 訂單DTO │ │ │ └── config/ # 訂單服務(wù)專屬配置 │ │ └── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ └── mapper/ # 訂單Mapper.xml │ └── test/ ├── demo-ai-service/ # AI微服務(wù)(可選,AI相關(guān)業(yè)務(wù)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/ai/ │ │ │ ├── DemoAiApplication.java # AI服務(wù)啟動(dòng)類 │ │ │ ├── controller/ # AI控制器 │ │ │ ├── service/ # AI服務(wù)層 │ │ │ ├── model/ # AI模型相關(guān)DTO │ │ │ └── config/ # AI配置(OpenAI密鑰、模型參數(shù)) │ │ └── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ └── ai_prompt/ # AI提示詞模板 │ └── test/ ├── README.md # 微服務(wù)整體說明 └── .gitignore # 全局忽略文件
二、核心組件職責(zé)說明(微服務(wù)特有)
組件名稱 | 核心職責(zé) | 關(guān)鍵特點(diǎn) |
demo-common | 所有微服務(wù)的通用代碼,無業(yè)務(wù)邏輯 | 獨(dú)立 Jar 包,被網(wǎng)關(guān)、用戶、訂單等所有服務(wù)依賴 |
demo-gateway | 微服務(wù)入口,負(fù)責(zé)路由轉(zhuǎn)發(fā)、統(tǒng)一鑒權(quán)、跨域、限流 | 無業(yè)務(wù)代碼,僅處理網(wǎng)關(guān)相關(guān)邏輯 |
demo-user-service | 專注用戶業(yè)務(wù)(注冊、登錄、用戶信息管理) | 獨(dú)立數(shù)據(jù)庫,對外暴露 Feign 接口供訂單服務(wù)調(diào)用 |
demo-order-service | 專注訂單業(yè)務(wù)(創(chuàng)建訂單、查詢訂單、調(diào)用用戶服務(wù)查用戶信息) | 依賴用戶服務(wù) Feign,獨(dú)立數(shù)據(jù)庫 |
demo-ai-service | 專注 AI 業(yè)務(wù)(對話、向量檢索) | 無數(shù)據(jù)庫依賴,僅對接 AI 模型 |
三、單個(gè)微服務(wù)內(nèi)部分層(以用戶服務(wù)為例)
微服務(wù)整體目錄結(jié)構(gòu)(核心:按服務(wù)拆分,復(fù)用公共模塊)
demo-microservice/ # 微服務(wù)父工程(僅管理依賴版本) ├── pom.xml # 父POM:統(tǒng)一管理Spring Cloud、各依賴版本 ├── demo-common/ # 公共通用模塊(所有微服務(wù)復(fù)用) │ ├── pom.xml │ └── src/main/java/com/example/demo/common/ │ ├── constant/ # 全局常量(如狀態(tài)碼、通用枚舉) │ ├── exception/ # 全局異常(業(yè)務(wù)異常、全局處理器) │ ├── util/ # 通用工具(日期、HTTP、Bean拷貝) │ ├── config/ # 通用配置(Redis、跨域、Feign配置) │ ├── dto/ # 通用DTO(分頁、統(tǒng)一響應(yīng)體) │ └── feign/ # Feign遠(yuǎn)程調(diào)用接口(給其他服務(wù)調(diào)用) ├── demo-gateway/ # 網(wǎng)關(guān)微服務(wù)(統(tǒng)一入口、路由、鑒權(quán)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/gateway/ │ │ │ ├── DemoGatewayApplication.java # 網(wǎng)關(guān)啟動(dòng)類 │ │ │ ├── config/ # 網(wǎng)關(guān)配置(路由、跨域、過濾器) │ │ │ ├── filter/ # 網(wǎng)關(guān)過濾器(token校驗(yàn)、日志) │ │ │ └── handler/ # 網(wǎng)關(guān)異常處理 │ │ └── resources/ │ │ ├── application.yml │ │ └── application-dev.yml │ └── test/ ├── demo-user-service/ # 用戶微服務(wù)(用戶相關(guān)業(yè)務(wù)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/user/ │ │ │ ├── DemoUserApplication.java # 用戶服務(wù)啟動(dòng)類 │ │ │ ├── controller/ # 用戶控制器(僅用戶接口) │ │ │ ├── service/ # 用戶服務(wù)層(接口+實(shí)現(xiàn)) │ │ │ ├── mapper/ # 用戶數(shù)據(jù)訪問層 │ │ │ ├── entity/ # 用戶實(shí)體(僅用戶相關(guān)表) │ │ │ ├── dto/ # 用戶DTO(入?yún)?出參) │ │ │ ├── config/ # 用戶服務(wù)專屬配置(MyBatis、MQ) │ │ │ └── feign/ # 對外暴露的Feign接口(供其他服務(wù)調(diào)用) │ │ └── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ └── mapper/ # 用戶Mapper.xml │ └── test/ ├── demo-order-service/ # 訂單微服務(wù)(訂單相關(guān)業(yè)務(wù)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/order/ │ │ │ ├── DemoOrderApplication.java # 訂單服務(wù)啟動(dòng)類 │ │ │ ├── controller/ # 訂單控制器 │ │ │ ├── service/ # 訂單服務(wù)層(含調(diào)用用戶服務(wù)Feign) │ │ │ ├── mapper/ # 訂單數(shù)據(jù)訪問層 │ │ │ ├── entity/ # 訂單實(shí)體 │ │ │ ├── dto/ # 訂單DTO │ │ │ └── config/ # 訂單服務(wù)專屬配置 │ │ └── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ └── mapper/ # 訂單Mapper.xml │ └── test/ ├── demo-ai-service/ # AI微服務(wù)(可選,AI相關(guān)業(yè)務(wù)) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/com/example/demo/ai/ │ │ │ ├── DemoAiApplication.java # AI服務(wù)啟動(dòng)類 │ │ │ ├── controller/ # AI控制器 │ │ │ ├── service/ # AI服務(wù)層 │ │ │ ├── model/ # AI模型相關(guān)DTO │ │ │ └── config/ # AI配置(OpenAI密鑰、模型參數(shù)) │ │ └── resources/ │ │ ├── application.yml │ │ ├── application-dev.yml │ │ └── ai_prompt/ # AI提示詞模板 │ └── test/ ├── README.md # 微服務(wù)整體說明 └── .gitignore # 全局忽略文件
二、核心組件職責(zé)說明(微服務(wù)特有)
組件名稱 | 核心職責(zé) | 關(guān)鍵特點(diǎn) |
demo-common | 所有微服務(wù)的通用代碼,無業(yè)務(wù)邏輯 | 獨(dú)立 Jar 包,被網(wǎng)關(guān)、用戶、訂單等所有服務(wù)依賴 |
demo-gateway | 微服務(wù)入口,負(fù)責(zé)路由轉(zhuǎn)發(fā)、統(tǒng)一鑒權(quán)、跨域、限流 | 無業(yè)務(wù)代碼,僅處理網(wǎng)關(guān)相關(guān)邏輯 |
demo-user-service | 專注用戶業(yè)務(wù)(注冊、登錄、用戶信息管理) | 獨(dú)立數(shù)據(jù)庫,對外暴露 Feign 接口供訂單服務(wù)調(diào)用 |
demo-order-service | 專注訂單業(yè)務(wù)(創(chuàng)建訂單、查詢訂單、調(diào)用用戶服務(wù)查用戶信息) | 依賴用戶服務(wù) Feign,獨(dú)立數(shù)據(jù)庫 |
demo-ai-service | 專注 AI 業(yè)務(wù)(對話、向量檢索) | 無數(shù)據(jù)庫依賴,僅對接 AI 模型 |
三、單個(gè)微服務(wù)內(nèi)部分層(以用戶服務(wù)為例)
每個(gè)微服務(wù)內(nèi)部仍遵循 Spring Boot 單項(xiàng)目的分層規(guī)范,保證自身完整性:
demo-user-service/src/main/java/com/example/demo/user/ ├── DemoUserApplication.java # 微服務(wù)啟動(dòng)類(加@SpringBootApplication、@EnableDiscoveryClient) ├── controller/UserController.java # 用戶接口(僅處理用戶相關(guān)請求) ├── service/ │ ├── UserService.java # 用戶服務(wù)接口 │ └── impl/UserServiceImpl.java # 用戶服務(wù)實(shí)現(xiàn) ├── mapper/UserMapper.java # 用戶Mapper(對接user表) ├── entity/User.java # 用戶實(shí)體(僅映射user表) ├── dto/ │ ├── req/UserAddReqDTO.java # 用戶新增入?yún)? │ └── resp/UserInfoRespDTO.java # 用戶信息出參 ├── config/MyBatisConfig.java # 用戶服務(wù)專屬M(fèi)yBatis配置 └── feign/UserFeignClient.java # 對外暴露的Feign接口(供訂單服務(wù)調(diào)用)
1. 父工程 pom.xml(核心:管理 Spring Cloud 版本)
<?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>
<groupId>com.example</groupId>
<artifactId>demo-microservice</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>demo-microservice</name>
<!-- 子模塊聲明 -->
<modules>
<module>demo-common</module>
<module>demo-gateway</module>
<module>demo-user-service</module>
<module>demo-order-service</module>
<module>demo-ai-service</module>
</modules>
<!-- 版本管理:Spring Cloud & Spring Boot -->
<properties>
<spring.boot.version>3.2.0</spring.boot.version>
<spring.cloud.version>2023.0.0</spring.cloud.version>
<spring.cloud.alibaba.version>2023.0.1.0</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud 依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba 依賴(可選) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 公共模塊依賴 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>demo-common</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>2. 微服務(wù)啟動(dòng)類示例(用戶服務(wù))
package com.example.demo.user;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 用戶微服務(wù)啟動(dòng)類
* @EnableDiscoveryClient:注冊到服務(wù)注冊中心(Nacos/Eureka)
* @EnableFeignClients:開啟Feign遠(yuǎn)程調(diào)用
* @MapperScan:掃描Mapper接口
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.example.demo.common.feign")
@MapperScan("com.example.demo.user.mapper")
public class DemoUserApplication {
public static void main(String[] args) {
SpringApplication.run(DemoUserApplication.class, args);
}
}五、微服務(wù)目錄設(shè)計(jì)核心原則
- 服務(wù)獨(dú)立:每個(gè)微服務(wù)是獨(dú)立的子工程,有自己的啟動(dòng)類、配置、數(shù)據(jù)庫(按需),可獨(dú)立部署、擴(kuò)容;
- 復(fù)用優(yōu)先:通用代碼(工具、異常、常量)全部放到 demo-common,避免重復(fù)編寫;
- 邊界清晰:每個(gè)微服務(wù)僅負(fù)責(zé)自身業(yè)務(wù)(如用戶服務(wù)只處理用戶,訂單服務(wù)只處理訂單),通過 Feign 調(diào)用其他服務(wù);
- 分層統(tǒng)一:每個(gè)微服務(wù)內(nèi)部仍遵循 “Controller→Service→Mapper→Entity” 分層,保持開發(fā)規(guī)范一致。
總結(jié):
- 整體結(jié)構(gòu):微服務(wù)以父工程為依賴入口,拆分為公共模塊、網(wǎng)關(guān)、各業(yè)務(wù)微服務(wù),每個(gè)微服務(wù)獨(dú)立且復(fù)用公共代碼;
- 內(nèi)部規(guī)范:單個(gè)微服務(wù)內(nèi)部保留 Spring Boot 經(jīng)典分層,保證業(yè)務(wù)邏輯清晰;
- 核心特點(diǎn):服務(wù)解耦、獨(dú)立部署、通用代碼復(fù)用,符合微服務(wù) “高內(nèi)聚、低耦合” 的設(shè)計(jì)思想。
四、Spring MVC(Boot 整合)工程
1. 核心定位
基于 Spring Boot 整合 Spring MVC 框架,嚴(yán)格貼合 MVC(Model-View-Controller)分層設(shè)計(jì),支持前后端一體(返回視圖)或前后端分離(返回 JSON),是 Web 開發(fā)的基礎(chǔ)架構(gòu),適配所有 Web 項(xiàng)目。
2. 完整目錄結(jié)構(gòu)
demo-mvc/ # Spring Boot + MVC工程 ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/demo/ │ │ │ ├── DemoApplication.java # 啟動(dòng)類 │ │ │ ├── controller/ # C層(Controller):接收請求 │ │ │ │ ├── UserController.java # @Controller返回視圖 / @RestController返回JSON │ │ │ │ └── OrderController.java │ │ │ ├── service/ # M層(Model):業(yè)務(wù)邏輯 │ │ │ │ ├── UserService.java │ │ │ │ └── impl/UserServiceImpl.java │ │ │ ├── mapper/ # M層(Model):數(shù)據(jù)訪問 │ │ │ │ └── UserMapper.java │ │ │ ├── entity/ # M層(Model):數(shù)據(jù)模型 │ │ │ │ └── User.java │ │ │ ├── dto/ # M層擴(kuò)展:傳輸模型 │ │ │ │ ├── req/ │ │ │ │ └── resp/ │ │ │ └── config/ # MVC配置 │ │ │ └── WebMvcConfig.java # 自定義MVC規(guī)則(視圖解析器/靜態(tài)資源) │ │ └── resources/ # 資源目錄 │ │ ├── application.yml # MVC核心配置(端口/視圖解析器) │ │ ├── static/ # 靜態(tài)資源(CSS/JS/圖片) │ │ │ ├── css/ │ │ │ │ └── index.css │ │ │ └── js/ │ │ │ └── index.js │ │ └── templates/ # V層(View):視圖模板(Thymeleaf) │ │ ├── user/ │ │ │ └── userInfo.html │ │ └── index.html │ └── test/ │ └── java/com/example/demo/ │ └── controller/ │ └── UserControllerTest.java ├── pom.xml # 核心依賴:spring-boot-starter-web(內(nèi)置Spring MVC) ├── README.md └── .gitignore
MVC 分層與目錄的對應(yīng)關(guān)系(核心)
表格
MVC 分層 | 對應(yīng)目錄 / 類 | 核心作用 |
Controller(C 層) | controller/ | 接收前端請求,調(diào)用 Service,返回視圖 / JSON(Spring Boot 中 @RestController 返回 JSON,@Controller 返回視圖) |
Model(M 層) | entity/ /dto/ /service/ | 數(shù)據(jù)模型(實(shí)體)+ 業(yè)務(wù)邏輯(Service)+ 數(shù)據(jù)訪問(Mapper),是 MVC 的核心數(shù)據(jù)層 |
View(V 層) | resources/templates/ | 前端視圖頁面(Thymeleaf/Freemarker),前后端分離項(xiàng)目中此目錄可空 |
3. 核心配置(WebMvcConfig.java)
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Spring MVC自定義配置(替代傳統(tǒng)XML)
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
// 配置視圖解析器(前后端一體場景)
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.thymeleaf()
.prefix("classpath:/templates/") // 視圖前綴
.suffix(".html"); // 視圖后綴
}
// 配置靜態(tài)資源訪問(放行static目錄)
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}4. 核心特點(diǎn)
- 嚴(yán)格貼合 MVC 分層:C 層 = controller 目錄,M 層 = service/mapper/entity,V 層 = templates 目錄;
- 核心依賴是
spring-boot-starter-web(內(nèi)置 Spring MVC 核心組件 DispatcherServlet); - 前后端一體場景:Controller 用
@Controller,返回視圖名稱(如return "user/userInfo"); - 前后端分離場景:Controller 用
@RestController,返回 JSON,可刪除 templates 目錄; - 通過
WebMvcConfig自定義 MVC 規(guī)則(視圖解析器、靜態(tài)資源、攔截器),替代傳統(tǒng) XML 配置。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java創(chuàng)建多線程局域網(wǎng)聊天室實(shí)例
這篇文章主要介紹了Java創(chuàng)建多線程局域網(wǎng)聊天室實(shí)例,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
Java程序運(yùn)行時(shí)出現(xiàn)亂碼問題的排查與解決方法
本文主要介紹了Java程序運(yùn)行時(shí)出現(xiàn)亂碼問題的排查與解決方法,包括檢查Java源文件編碼、檢查編譯時(shí)的編碼設(shè)置、檢查運(yùn)行時(shí)的編碼設(shè)置、檢查命令提示符的代碼頁、檢查命令提示符的字體、檢查 Java 程序的輸出代碼以及檢查環(huán)境變量,需要的朋友可以參考下2025-03-03
SpringBoot整合XXLJob的實(shí)現(xiàn)示例
XXLJob是大眾點(diǎn)評開源的分布式任務(wù)調(diào)度平臺,支持Cron、固定間隔等觸發(fā)方式,本文主要介紹了SpringBoot整合XXLJob的實(shí)現(xiàn)示例,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09
關(guān)于@MapperScan和@ComponentScan的使用問題
文章介紹了在使用`@MapperScan`和`@ComponentScan`時(shí)可能會遇到的包掃描沖突問題,并提供了解決方法,同時(shí),還詳細(xì)解釋了`@MapperScan`和`@ComponentScan`的功能和使用場景2025-01-01

