$npx -y skills add youlaitech/youlai-skills --skill spring-bootSpring Boot backend development standards. Use this skill when developing Spring Boot projects, implementing REST APIs, MyBatis-Plus data access, authentication, or JWT/Redis token management.
| 1 | # Spring Boot 后端开发规范 |
| 2 | |
| 3 | ## 触发条件 |
| 4 | |
| 5 | - Develop Spring Boot projects |
| 6 | - Implement REST APIs |
| 7 | - Use MyBatis-Plus for data access |
| 8 | - Implement JWT/Redis Token authentication |
| 9 | - Implement permission control |
| 10 | |
| 11 | --- |
| 12 | |
| 13 | ## Part 1: 技术栈 |
| 14 | |
| 15 | | 层 | 选型 | 说明 | |
| 16 | |----|------|------| |
| 17 | | JDK | **Java 17+** | 运行环境 | |
| 18 | | 基础框架 | **Spring Boot 3.x** | 自动配置、内嵌容器 | |
| 19 | | ORM | **MyBatis-Plus** | 增强 CRUD、代码生成 | |
| 20 | | 数据库 | **MySQL 8.x** | InnoDB 引擎 | |
| 21 | | 缓存 | **Redis 7.x** | 分布式缓存、Token 存储 | |
| 22 | | 认证 | **Spring Security** + **JWT** / **Redis Token** | 双模式可切换 | |
| 23 | | API 文档 | **Knife4j** (Swagger) | OpenAPI 3.0 | |
| 24 | | 对象映射 | **MapStruct** | 编译期生成,禁止 BeanUtils | |
| 25 | | 工具库 | **Hutool** / **Lombok** | 减少样板代码 | |
| 26 | |
| 27 | --- |
| 28 | |
| 29 | ## Part 2: 目录结构 |
| 30 | |
| 31 | ``` |
| 32 | src/main/java/com/youlai/boot/ |
| 33 | ├── YouLaiBootApplication.java # 启动类(@EnableScheduling) |
| 34 | │ |
| 35 | ├── common/ # 公共模块(被所有层共享) |
| 36 | │ ├── annotation/ # 自定义注解(DataPermission, Log, RepeatSubmit, ValidField) |
| 37 | │ ├── aspect/ # 切面(LogAspect, RepeatSubmitAspect) |
| 38 | │ ├── base/ # 基类(BaseEntity, BaseQuery, IBaseEnum) |
| 39 | │ ├── constant/ # 常量(JwtClaimConstants, RedisConstants, SecurityConstants, SystemConstants) |
| 40 | │ ├── enums/ # 通用枚举(ActionTypeEnum, DataScopeEnum, LogModuleEnum, StatusEnum) |
| 41 | │ ├── exception/ # BusinessException |
| 42 | │ ├── model/ # 通用模型(KeyValue, Option) |
| 43 | │ ├── result/ # Result, PageResult, ResultCode, ResponseWriter |
| 44 | │ ├── util/ # ExcelUtils, IPUtils |
| 45 | │ └── validator/ # @ValidField 校验器 |
| 46 | │ |
| 47 | ├── framework/ # 框架层(技术基础设施,不依赖业务模块) |
| 48 | │ ├── apidoc/ # OpenApiConfig, Knife4jOpenApiCustomizer |
| 49 | │ ├── cache/ # RedisConfig, CaffeineConfig |
| 50 | │ ├── captcha/ # 验证码(config, service, model, exception) |
| 51 | │ ├── integration/ # 第三方集成(wxma, mail, sms) |
| 52 | │ ├── job/ # XxlJobConfig |
| 53 | │ ├── mybatis/ # MybatisConfig, MyMetaObjectHandler, MyDataPermissionHandler |
| 54 | │ ├── security/ # 安全内核(通用,不依赖业务) |
| 55 | │ │ ├── config/ # SecurityProperties |
| 56 | │ │ ├── filter/ # TokenAuthenticationFilter |
| 57 | │ │ ├── model/ # SecurityUser, SecurityUserDetails, RoleDataScope, AuthenticationToken |
| 58 | │ │ ├── port/ # UserAuthenticationPort, PermissionPort(端口接口) |
| 59 | │ │ ├── service/ # SecurityUserDetailsService, PermissionService |
| 60 | │ │ ├── token/ # TokenManager, JwtTokenManager, RedisTokenManager |
| 61 | │ │ └── util/ # SecurityUtils |
| 62 | │ └── web/ # GlobalExceptionHandler, CorsConfig, JacksonConfig, RateLimiterFilter |
| 63 | │ |
| 64 | ├── auth/ # 认证模块(登录、Token 发放) |
| 65 | │ ├── controller/ # AuthController, WxMaAuthController |
| 66 | │ ├── service/ # AuthService, WxMaAuthService |
| 67 | │ ├── model/ # LoginReq, WxMaBindMobileReq, WxMaLoginResp |
| 68 | │ └── security/ # 认证流程实现(归使用方) |
| 69 | │ ├── config/ # SecurityConfig(Provider/Filter/Handler 总装) |
| 70 | │ ├── provider/ # SmsAuthenticationProvider, WxMaAuthenticationProvider |
| 71 | │ ├── model/ # SmsAuthenticationToken, WxMaAuthenticationToken |
| 72 | │ ├── filter/ # CaptchaValidationFilter(登录前置校验) |
| 73 | │ ├── handler/ # JsonAuthenticationEntryPoint, JsonAccessDeniedHandler |
| 74 | │ └── exception/ # MobileNotBoundException, SmsCaptchaException |
| 75 | │ |
| 76 | ├── system/ # 系统管理模块(用户/角色/菜单/部门/字典 CRUD) |
| 77 | │ ├── controller/ # UserController, RoleController, MenuController, DeptController 等 |
| 78 | │ ├── converter/ # UserConverter 等(MapStruct) |
| 79 | │ ├── enums/ # MenuTypeEnum, DictCodeEnum 等 |
| 80 | │ ├── mapper/ # UserMapper 等 |
| 81 | │ ├── model/ # entity/ form/ query/ vo/ dto/ |
| 82 | │ ├── service/ # UserService 等 + impl/ |
| 83 | │ └── security/ |
| 84 | │ └── adapter/ # UserAuthenticationAdapter(实现 framework 端口,委托 system 服务) |
| 85 | │ |
| 86 | ├── codegen/ # 代码生成模块 |
| 87 | ├── file/ # 文件管理模块 |
| 88 | └── message/ # 消息推送模块(SSE) |
| 89 | ``` |
| 90 | |
| 91 | **设计原则**: |
| 92 | - `common/` 是公共常量/枚举/工具,被所有层共享,不依赖任何层 |
| 93 | - `framework/` 是框架层,不依赖 `auth/` 和 `system/`,通过 Port 接口解耦 |
| 94 | - `auth/` 是认证模块,依赖 `framework/`,含认证流程实现(Provider/Filter/Handler) |
| 95 | - `system/` 是系统管理,依赖 `framework/`,通过 Adapter 实现 Port |
| 96 | - `framework.security` 只含通用安全组件;业务特定认证(短信/微信)归 `auth.security` |
| 97 | |
| 98 | --- |
| 99 | |
| 100 | ## Part 3: 命名规范 |
| 101 | |
| 102 | ### 3.1 文件命名 |
| 103 | |
| 104 | | 类型 | 规范 | 示例 | |
| 105 | |------|------|------| |
| 106 | | Java 文件 | PascalCase,类名与文件名一致 | `UserController.java` | |
| 107 | | |