Ark 开发规范
在 Spring Boot 3.4.13 (2026年稳定版) 的开发环境中,代码不仅要追求“能跑”,更要追求“现代”与“安全”。
一、 依赖与版本规范 (Maven/Gradle)
- 禁止硬编码版本号:除特殊自定义 SDK 外,所有依赖版本必须由
spring-boot-starter-parent或自定义的BOM(Bill of Materials) 统一管理。 - 清理遗留包:禁止项目中出现
javax.*命名空间的依赖,必须全面迁移至jakarta.*。 - 定期执行依赖树检查:每两周执行一次
mvn dependency:tree,确保没有重复的Hutool、Fastjson或Spring核心包版本。
二、 核心注入规范 (Dependency Injection)
强制使用构造器注入:
规范:禁止使用
@Autowired进行字段注入 (Field Injection)。理由:字段注入不可变性差,且容易导致你之前遇到的“注入值为 null 或 false”却无法排查的问题。
工具:配合 Lombok 的
@RequiredArgsConstructor。类型优先原则:
规范:
@ConditionalOnMissingBean必须显式指定value = Xxx.class,严禁仅使用name = "xxx"。理由:避免因重构类名导致的字符串失配。
引入
@Fallback机制:新特性:对于多个同类型 Bean,如果不希望显式使用
@Primary,可以使用 Spring 3.4 新引入的@Fallback标注备选 Bean。
三、 配置绑定规范 (Externalized Config)
类型安全配置类:
规范:严禁在 Controller/Service 中直接大量使用
@Value。必须定义@ConfigurationProperties类。理由:
@Value不支持松散绑定 (Relaxed Binding),且在 Nacos 动态刷新时容易出现状态不一致。默认值显式定义:在配置类的字段上直接赋予默认值,而不是在代码逻辑中判断
null。开启构造函数绑定:Spring 3.4 优化了构造函数绑定,不再需要显式加
@ConstructorBinding。
四、 微服务与云原生规范 (Cloud Native)
启用虚拟线程 (Virtual Threads):
规范:在
application.yml中设置spring.threads.virtual.enabled: true。理由:2026 年 JDK 21+ 已是标配,虚拟线程能极大地提升高并发 IO(如你的 GitHub SSO 回调)的吞吐量。
结构化日志 (Structured Logging):
新规:Spring 3.4 原生支持
ecs(Elastic Common Schema) 格式。生产环境必须开启logging.structured.format.console=ecs。优雅停机:必须配置
server.shutdown: graceful,确保 GitHub SSO 的回调事务在容器销毁前处理完毕。
五、 API 与文档规范 (RESTful)
全面转向 SpringDoc/OpenAPI 3:
规范:移除所有
@Api、@ApiOperation,改用@Tag、@Operation。地址:统一使用
/swagger-ui/index.html。返回体统一化:所有 Controller 必须返回
Result<T>包装类,并包含traceId(通过 Micrometer Tracing 自动生成)。
六、 测试规范 (Testing)
- **使用
MvcTester**:Spring 3.4 推荐使用 AssertJ 风格的MvcTester替代传统的MockMvc。 - 测试 Bean 替换:使用
@TestBean或@MockitoBean(Spring 3.4 官方注解)替代过时的@MockBean。
🛠️ 建议操作
你可以先从**“构造器注入”和“配置类封装”**开始重构。比如你的 GitHub SSO 状态控制,可以这样写:
@ConfigurationProperties(prefix = "com.whaleal.ark.cloud.third.github")
public record GithubProperties(boolean enabled) {} // 使用 Java Record,更现代
@RestController
@RequiredArgsConstructor // 自动生成构造函数注入
public class MsgGitHubSsoController {
private final GithubProperties githubProperties; // 无法被后续随意修改,安全
}