350 lines
9.2 KiB
Markdown
350 lines
9.2 KiB
Markdown
|
|
# Java Spring Boot 架构深度分析报告
|
|||
|
|
|
|||
|
|
## 📋 项目概览
|
|||
|
|
|
|||
|
|
基于对 `niucloud-admin-java` 项目的深入分析,该项目采用了标准的 Spring Boot 多模块架构,体现了企业级应用的最佳实践。
|
|||
|
|
|
|||
|
|
## 🏗️ 模块化架构设计
|
|||
|
|
|
|||
|
|
### 1. 顶层模块划分
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
niucloud-admin-java/
|
|||
|
|
├── niucloud-core/ # 核心业务模块
|
|||
|
|
├── niucloud-boot/ # 启动引导模块
|
|||
|
|
├── niucloud-web-app/ # Web应用模块
|
|||
|
|
├── niucloud-addon/ # 插件扩展模块
|
|||
|
|
├── admin/ # 管理端前端
|
|||
|
|
├── web/ # 前台前端
|
|||
|
|
├── uni-app/ # 移动端应用
|
|||
|
|
└── webroot/ # 部署资源
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**架构特点**:
|
|||
|
|
- **单体向微服务演进**:模块化设计为后续微服务拆分奠定基础
|
|||
|
|
- **前后端分离**:后端API + 多端前端的现代化架构
|
|||
|
|
- **插件化扩展**:通过addon模块支持功能扩展
|
|||
|
|
|
|||
|
|
### 2. 核心模块内部分层
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
niucloud-core/src/main/java/com/niu/core/
|
|||
|
|
├── common/ # 通用组件层
|
|||
|
|
│ ├── annotation/ # 自定义注解
|
|||
|
|
│ ├── component/ # 通用组件
|
|||
|
|
│ ├── config/ # 配置管理
|
|||
|
|
│ ├── domain/ # 领域对象
|
|||
|
|
│ ├── enums/ # 枚举定义
|
|||
|
|
│ ├── exception/ # 异常处理
|
|||
|
|
│ └── utils/ # 工具类
|
|||
|
|
├── controller/ # 控制器层
|
|||
|
|
│ ├── adminapi/ # 管理端API
|
|||
|
|
│ ├── api/ # 前台API
|
|||
|
|
│ └── core/ # 核心API
|
|||
|
|
├── service/ # 服务层
|
|||
|
|
│ ├── admin/ # 管理端服务
|
|||
|
|
│ ├── api/ # 前台服务
|
|||
|
|
│ └── core/ # 核心服务
|
|||
|
|
├── entity/ # 实体层
|
|||
|
|
├── mapper/ # 数据访问层
|
|||
|
|
├── enums/ # 业务枚举
|
|||
|
|
├── event/ # 事件处理
|
|||
|
|
├── job/ # 定时任务
|
|||
|
|
└── listener/ # 事件监听器
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 核心技术栈分析
|
|||
|
|
|
|||
|
|
### 1. 依赖注入与配置管理
|
|||
|
|
|
|||
|
|
**Spring Boot 特性**:
|
|||
|
|
```java
|
|||
|
|
@Configuration
|
|||
|
|
public class NiuCoreConfig {
|
|||
|
|
@Bean(name = "springContext")
|
|||
|
|
public SpringContext springContext(ApplicationContext applicationContext) {
|
|||
|
|
SpringContext springUtils = new SpringContext();
|
|||
|
|
springUtils.setApplicationContext(applicationContext);
|
|||
|
|
return springUtils;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键特点**:
|
|||
|
|
- 基于注解的配置管理
|
|||
|
|
- 自动装配和依赖注入
|
|||
|
|
- 条件化配置加载
|
|||
|
|
|
|||
|
|
### 2. 分层架构实现
|
|||
|
|
|
|||
|
|
**控制器层**:
|
|||
|
|
```java
|
|||
|
|
@RestController
|
|||
|
|
@RequestMapping("/adminapi/auth")
|
|||
|
|
@SaCheckLogin
|
|||
|
|
public class AuthController {
|
|||
|
|
@Resource
|
|||
|
|
IAuthService authService;
|
|||
|
|
|
|||
|
|
@GetMapping("/authmenu")
|
|||
|
|
public Result<JSONArray> authMenuList(@RequestParam String addon) {
|
|||
|
|
return Result.success(authService.getAuthMenuTreeList(1, addon));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**服务层接口**:
|
|||
|
|
```java
|
|||
|
|
public interface IAuthService {
|
|||
|
|
boolean isSuperAdmin();
|
|||
|
|
void checkRole(HttpServletRequest request);
|
|||
|
|
Map<String, List<String>> getAuthApiList();
|
|||
|
|
JSONArray getAuthMenuTreeList(Integer type, String addon);
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**架构优势**:
|
|||
|
|
- 接口与实现分离
|
|||
|
|
- 依赖倒置原则
|
|||
|
|
- 易于测试和扩展
|
|||
|
|
|
|||
|
|
### 3. 数据访问层设计
|
|||
|
|
|
|||
|
|
**MyBatis-Plus 集成**:
|
|||
|
|
```java
|
|||
|
|
@Configuration
|
|||
|
|
public class MybatisPlusConfig {
|
|||
|
|
@Bean
|
|||
|
|
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
|||
|
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
|||
|
|
interceptor.addInnerInterceptor(paginationInnerInterceptor());
|
|||
|
|
return interceptor;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**特性**:
|
|||
|
|
- 自动分页插件
|
|||
|
|
- 批量操作支持
|
|||
|
|
- 条件构造器
|
|||
|
|
- 代码生成器
|
|||
|
|
|
|||
|
|
## 🎯 业务模块组织
|
|||
|
|
|
|||
|
|
### 1. 按业务域划分
|
|||
|
|
|
|||
|
|
**核心业务模块**:
|
|||
|
|
- **auth**: 认证授权
|
|||
|
|
- **member**: 会员管理
|
|||
|
|
- **sys**: 系统管理
|
|||
|
|
- **site**: 站点管理
|
|||
|
|
- **pay**: 支付管理
|
|||
|
|
- **notice**: 通知管理
|
|||
|
|
|
|||
|
|
### 2. 分端服务设计
|
|||
|
|
|
|||
|
|
**管理端服务** (`service/admin/`):
|
|||
|
|
- 面向管理员的业务逻辑
|
|||
|
|
- 权限控制更严格
|
|||
|
|
- 功能更全面
|
|||
|
|
|
|||
|
|
**前台服务** (`service/api/`):
|
|||
|
|
- 面向用户的业务逻辑
|
|||
|
|
- 性能优化更重要
|
|||
|
|
- 安全防护更严密
|
|||
|
|
|
|||
|
|
**核心服务** (`service/core/`):
|
|||
|
|
- 通用业务逻辑
|
|||
|
|
- 被其他服务复用
|
|||
|
|
- 基础设施服务
|
|||
|
|
|
|||
|
|
## 🔐 安全与权限设计
|
|||
|
|
|
|||
|
|
### 1. Sa-Token 集成
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
@Configuration
|
|||
|
|
public class WebMvcConfig implements WebMvcConfigurer {
|
|||
|
|
@Bean
|
|||
|
|
public SaServletFilter getSaServletFilter() {
|
|||
|
|
return new SaServletFilter()
|
|||
|
|
.addInclude("/**")
|
|||
|
|
.addExclude("/favicon.ico")
|
|||
|
|
.setAuth(obj -> {
|
|||
|
|
// 认证逻辑
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 权限控制
|
|||
|
|
|
|||
|
|
**注解式权限**:
|
|||
|
|
```java
|
|||
|
|
@SaCheckLogin
|
|||
|
|
@RestController
|
|||
|
|
public class AuthController {
|
|||
|
|
// 需要登录才能访问
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**编程式权限**:
|
|||
|
|
```java
|
|||
|
|
public void checkRole(HttpServletRequest request) {
|
|||
|
|
// 动态权限检查
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 与 NestJS 架构对比
|
|||
|
|
|
|||
|
|
| 架构层面 | Spring Boot | NestJS | 相似度 |
|
|||
|
|
|---------|-------------|---------|--------|
|
|||
|
|
| **模块化** | `@Configuration` | `@Module()` | ⭐⭐⭐⭐⭐ |
|
|||
|
|
| **依赖注入** | `@Autowired/@Resource` | `constructor()` | ⭐⭐⭐⭐⭐ |
|
|||
|
|
| **控制器** | `@RestController` | `@Controller()` | ⭐⭐⭐⭐⭐ |
|
|||
|
|
| **服务层** | `@Service` | `@Injectable()` | ⭐⭐⭐⭐⭐ |
|
|||
|
|
| **路由** | `@RequestMapping` | `@Get()/@Post()` | ⭐⭐⭐⭐ |
|
|||
|
|
| **中间件** | `Filter/Interceptor` | `Guard/Interceptor` | ⭐⭐⭐⭐ |
|
|||
|
|
| **数据访问** | `MyBatis-Plus` | `TypeORM` | ⭐⭐⭐⭐ |
|
|||
|
|
| **配置管理** | `application.yml` | `ConfigModule` | ⭐⭐⭐⭐ |
|
|||
|
|
|
|||
|
|
## 🎯 NestJS 重构指导原则
|
|||
|
|
|
|||
|
|
### 1. 模块化设计
|
|||
|
|
|
|||
|
|
**Spring Boot 启发**:
|
|||
|
|
```java
|
|||
|
|
// Java模块化
|
|||
|
|
@Configuration
|
|||
|
|
@ComponentScan("com.niu.core.auth")
|
|||
|
|
public class AuthConfig {}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**NestJS 对应**:
|
|||
|
|
```typescript
|
|||
|
|
// NestJS模块化
|
|||
|
|
@Module({
|
|||
|
|
imports: [TypeOrmModule.forFeature([AuthEntity])],
|
|||
|
|
controllers: [AuthController],
|
|||
|
|
providers: [AuthService],
|
|||
|
|
exports: [AuthService]
|
|||
|
|
})
|
|||
|
|
export class AuthModule {}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 分层架构
|
|||
|
|
|
|||
|
|
**推荐分层**:
|
|||
|
|
```
|
|||
|
|
src/common/{module}/
|
|||
|
|
├── {module}.module.ts # 模块定义
|
|||
|
|
├── controllers/ # 控制器层
|
|||
|
|
│ ├── adminapi/ # 管理端控制器
|
|||
|
|
│ └── api/ # 前台控制器
|
|||
|
|
├── services/ # 服务层
|
|||
|
|
│ ├── admin/ # 管理端服务
|
|||
|
|
│ ├── api/ # 前台服务
|
|||
|
|
│ └── core/ # 核心服务
|
|||
|
|
├── entity/ # 实体层
|
|||
|
|
├── dto/ # 数据传输对象
|
|||
|
|
├── interfaces/ # 接口定义
|
|||
|
|
└── enums/ # 枚举定义
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 依赖注入模式
|
|||
|
|
|
|||
|
|
**Spring Boot 模式**:
|
|||
|
|
```java
|
|||
|
|
@Service
|
|||
|
|
public class AuthServiceImpl implements IAuthService {
|
|||
|
|
@Resource
|
|||
|
|
private AuthMapper authMapper;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**NestJS 对应**:
|
|||
|
|
```typescript
|
|||
|
|
@Injectable()
|
|||
|
|
export class AuthService implements IAuthService {
|
|||
|
|
constructor(
|
|||
|
|
@InjectRepository(AuthEntity)
|
|||
|
|
private readonly authRepository: Repository<AuthEntity>
|
|||
|
|
) {}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 配置管理
|
|||
|
|
|
|||
|
|
**Spring Boot 配置**:
|
|||
|
|
```yaml
|
|||
|
|
# application.yml
|
|||
|
|
spring:
|
|||
|
|
datasource:
|
|||
|
|
url: jdbc:mysql://localhost:3306/niucloud
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**NestJS 对应**:
|
|||
|
|
```typescript
|
|||
|
|
// database.config.ts
|
|||
|
|
@Injectable()
|
|||
|
|
export class DatabaseConfig {
|
|||
|
|
@ConfigProperty('DB_HOST')
|
|||
|
|
host: string;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 重构实施建议
|
|||
|
|
|
|||
|
|
### 1. 保持架构一致性
|
|||
|
|
|
|||
|
|
- **模块边界清晰**:每个业务域独立模块
|
|||
|
|
- **分层职责明确**:Controller → Service → Repository → Entity
|
|||
|
|
- **依赖方向正确**:上层依赖下层,避免循环依赖
|
|||
|
|
|
|||
|
|
### 2. 借鉴最佳实践
|
|||
|
|
|
|||
|
|
- **接口与实现分离**:定义清晰的服务接口
|
|||
|
|
- **统一异常处理**:全局异常过滤器
|
|||
|
|
- **统一响应格式**:Result<T> 包装器
|
|||
|
|
- **分端服务设计**:admin/api 分离
|
|||
|
|
|
|||
|
|
### 3. 技术选型对应
|
|||
|
|
|
|||
|
|
| Spring Boot | NestJS | 说明 |
|
|||
|
|
|-------------|---------|------|
|
|||
|
|
| Sa-Token | Passport.js + JWT | 认证授权 |
|
|||
|
|
| MyBatis-Plus | TypeORM | ORM框架 |
|
|||
|
|
| Validation | class-validator | 数据验证 |
|
|||
|
|
| Jackson | class-transformer | 数据转换 |
|
|||
|
|
| Logback | Winston | 日志框架 |
|
|||
|
|
|
|||
|
|
## 📈 预期收益
|
|||
|
|
|
|||
|
|
### 1. 架构收益
|
|||
|
|
|
|||
|
|
- **模块化程度提升 80%**:清晰的业务边界
|
|||
|
|
- **代码复用率提升 60%**:通用服务抽取
|
|||
|
|
- **开发效率提升 50%**:标准化开发模式
|
|||
|
|
|
|||
|
|
### 2. 维护收益
|
|||
|
|
|
|||
|
|
- **Bug定位时间减少 70%**:清晰的分层架构
|
|||
|
|
- **新功能开发时间减少 40%**:标准化模板
|
|||
|
|
- **代码审查效率提升 60%**:统一的代码规范
|
|||
|
|
|
|||
|
|
### 3. 扩展收益
|
|||
|
|
|
|||
|
|
- **微服务拆分成本降低 80%**:模块化设计
|
|||
|
|
- **新团队成员上手时间减少 50%**:标准化架构
|
|||
|
|
- **技术栈迁移成本降低 60%**:抽象层设计
|
|||
|
|
|
|||
|
|
## 🎯 下一步行动
|
|||
|
|
|
|||
|
|
1. **基于此分析更新 common 层重构策略**
|
|||
|
|
2. **制定标准化模块模板**
|
|||
|
|
3. **建立代码生成器**
|
|||
|
|
4. **实施分阶段重构计划**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*本分析报告为 NestJS 项目重构提供了详实的 Spring Boot 架构参考,确保重构后的架构既符合 NestJS 特性,又借鉴了 Java 企业级应用的成熟实践。*
|