🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install github/awesome-copilot/java-springboot

💡 提示:需要 Node.js 和 NPM

Spring Boot 最佳实践

你的目标是遵循既定的最佳实践,帮助我编写高质量的 Spring Boot 应用程序。

项目设置与结构

  • 构建工具: 使用 Maven (pom.xml) 或 Gradle (build.gradle) 进行依赖管理。
  • 启动器: 使用 Spring Boot 启动器(例如 spring-boot-starter-webspring-boot-starter-data-jpa)来简化依赖管理。
  • 包结构: 按功能/领域组织代码(例如 com.example.app.ordercom.example.app.user),而不是按层组织(例如 com.example.app.controllercom.example.app.service)。

依赖注入与组件

  • 构造器注入: 始终对必需的依赖项使用基于构造器的注入。这使得组件更容易测试,并使依赖关系显式化。
  • 不可变性: 将依赖字段声明为 private final
  • 组件原型: 适当地使用 @Component@Service@Repository@Controller/@RestController 注解来定义 Bean。

配置

  • 外部化配置: 使用 application.yml(或 application.properties)进行配置。YAML 因其可读性和分层结构而常被首选。
  • 类型安全属性: 使用 @ConfigurationProperties 将配置绑定到强类型的 Java 对象。
  • 配置文件: 使用 Spring 配置文件(application-dev.ymlapplication-prod.yml)来管理特定于环境的配置。
  • 密钥管理: 不要硬编码密钥。使用环境变量,或专门的密钥管理工具,如 HashiCorp Vault 或 AWS Secrets Manager。

Web 层(控制器)

  • RESTful 应用程序编程接口: 设计清晰一致的 RESTful 端点。
  • DTO(数据传输对象): 使用 DTO 在应用程序编程接口层暴露和使用数据。不要直接将 JPA 实体暴露给客户端。
  • 验证: 使用 Java Bean 验证(JSR 380)及其注解(@Valid@NotNull@Size)在 DTO 上验证请求负载。
  • 错误处理: 使用 @ControllerAdvice@ExceptionHandler 实现全局异常处理程序,以提供一致的错误响应。

服务层

  • 业务逻辑: 将所有业务逻辑封装在 @Service 类中。
  • 无状态性: 服务应该是无状态的。
  • 事务管理: 在服务方法上使用 @Transactional 以声明方式管理数据库事务。在必要的粒度级别应用它。

数据层(仓库)

  • Spring Data JPA: 通过扩展 JpaRepositoryCrudRepository 来使用 Spring Data JPA 仓库进行标准数据库操作。
  • 自定义查询: 对于复杂查询,使用 @Query 或 JPA Criteria API。
  • 投影: 使用 DTO 投影从数据库仅获取必要的数据。

日志记录

  • SLF4J: 使用 SLF4J 应用程序编程接口进行日志记录。
  • 日志声明: private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
  • 参数化日志: 使用参数化消息(logger.info("正在处理用户 {}...", userId);)而不是字符串拼接,以提高性能。

测试

  • 单元测试: 使用 JUnit 5 和像 Mockito 这样的模拟框架为服务和组件编写单元测试。
  • 集成测试: 使用 @SpringBootTest 进行加载 Spring 应用程序上下文的集成测试。
  • 测试切片: 使用像 @WebMvcTest(用于控制器)或 @DataJpaTest(用于仓库)这样的测试切片注解来隔离地测试应用程序的特定部分。
  • Testcontainers: 考虑使用 Testcontainers 进行可靠的、使用真实数据库、消息代理等的集成测试。

安全

  • Spring Security: 使用 Spring Security 进行身份验证和授权。
  • 密码编码: 始终使用像 BCrypt 这样的强哈希算法对密码进行编码。
  • 输入清理: 通过使用 Spring Data JPA 或参数化查询来防止 SQL 注入。通过正确编码输出来防止跨站脚本攻击。

📄 原始文档

完整文档(英文):

https://skills.sh/github/awesome-copilot/java-springboot

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。