mcpField
M
moai-lang-java

moai-lang-java

github.com/modu-ai开发1.2k80 次安装今天更新
代码仓库

关于 moai-lang-java

moai-lang-java 是面向 Java 项目的开发技能,涵盖 Java 21 与 Spring Boot 企业应用模式。它提供从安全、持久化到测试和构建的实用参考。

主要功能

  1. 01Java 21 语言特性与虚拟线程
  2. 02Spring Boot REST 与服务层模式
  3. 03Spring Security 身份验证配置
  4. 04JPA/Hibernate 实体与查询模式
  5. 05JUnit 5 与 TestContainers 测试
  6. 06Maven 与 Gradle 构建配置

适用场景

  1. 01实现 Spring Boot REST API
  2. 02配置 JWT 与 OAuth2 安全
  3. 03编写 JPA 数据访问层
  4. 04测试 Java 服务与数据库集成

MCP 相关

README 提到通过 Context7 MCP 工具获取 Spring、Hibernate 和 JUnit 等库的文档。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/modu-ai/moai-adk --skill moai-lang-java

安装后在 Claude Code 中输入/moai-lang-java确认已加载。

附带文件references/examples.mdreferences/reference.md

详细介绍

快速参考(30 秒)

Java 21 LTS 专家——使用 Spring Boot 3.3、虚拟线程和现代 Java 特性进行企业级开发。

自动触发:扩展名为 .java 的 Java 文件,以及 pom.xml、build.gradle 或 build.gradle.kts 等构建文件

核心功能:

  • Java 21 LTS:虚拟线程、模式匹配、record 模式、密封类
  • Spring Boot 3.3:REST 控制器、服务、存储库、WebFlux 响应式编程
  • Spring Security 6:JWT 身份验证、OAuth2、基于角色的访问控制
  • JPA/Hibernate 7:实体映射、关系、查询、事务
  • JUnit 5:单元测试、模拟、TestContainers 集成
  • 构建工具:Maven 3.9、使用 Kotlin DSL 的 Gradle 8.5

实现指南(5 分钟)

Java 21 LTS 特性

使用 Project Loom 的虚拟线程:

对 Executors.newVirtualThreadPerTaskExecutor 使用 try-with-resources。调用 IntStream.range,范围为 0 到 10000,并使用 forEach 提交任务,让任务休眠一秒后返回迭代值。

结构化并发预览模式:

对 new StructuredTaskScope.ShutdownOnFailure 使用 try-with-resources。通过调用 scope.fork 并传入 lambda 表达式,派生用于获取用户和订单的任务。调用 scope.join,然后调用 throwIfFailed。返回一个新的组合对象,其中包含两个任务提供程序的结果。

Switch 的模式匹配:

创建一个接收 Object 参数的 describe 方法。使用 switch 表达式,包含以下分支:Integer i 且保护条件 i 大于 0 时,返回正整数消息;Integer i 时,返回非正数消息;String s 时,返回长度消息;带通配符的 List 时,返回大小消息;null 时,返回空值消息;default 时,返回未知类型消息。

Record 模式和密封类:

定义包含 int x 和 int y 的 Point record。定义包含 Point topLeft 和 Point bottomRight 的 Rectangle record。创建 area 方法,使用 switch 对 Rectangle 模式进行解构,将两个 Point 组件分别赋给变量,并返回宽度乘高度的绝对值。定义一个 sealed Shape 接口,允许 Circle 和 Rectangle。实现一个包含 area 方法的 Circle record,该方法使用 PI 乘以半径的平方。

Spring Boot 3.3

REST 控制器模式:

创建 UserController,添加 RestController 注解、针对 api/users 的 RequestMapping,以及 RequiredArgsConstructor。注入 UserService。创建带有 GetMapping 和针对 id 的 PathVariable 的 getUser 方法,该方法返回 ResponseEntity:将 findById 结果映射为 ok,或者返回 notFound。创建 createUser 方法,添加 PostMapping、Valid 注解以及针对 CreateUserRequest 的 RequestBody。创建用户,构建 URI 位置,并返回包含响应正文的 created 响应。创建 deleteUser 方法,添加 DeleteMapping;根据服务结果返回 noContent 或 notFound。

服务层模式:

创建 UserService,添加 Service、RequiredArgsConstructor 和 readOnly 为 true 的 Transactional 注解。注入 UserRepository 和 PasswordEncoder。创建返回 Optional 的 findById 方法。创建事务性 create 方法,检查电子邮件是否重复;如果重复,则抛出 DuplicateEmailException;然后使用构建器模式创建 User,并对密码进行编码,最后保存到存储库。

Spring Security 6

安全配置模式:

创建 SecurityConfig,添加 Configuration 和 EnableWebSecurity 注解。定义一个接收 HttpSecurity 的 filterChain Bean。配置 authorizeHttpRequests:对公共 API 路径使用 permitAll,对管理路径使用 hasRole ADMIN,对所有其他请求使用 authenticated。使用默认配置配置 oauth2ResourceServer 的 jwt。将 sessionManagement 设为 STATELESS,并禁用 csrf。定义一个返回 BCryptPasswordEncoder 的 passwordEncoder Bean。

JPA/Hibernate 模式

实体定义模式:

创建带有 Entity 和 Table 注解的 User 实体。添加 Lombok 的 Getter、Setter、NoArgsConstructor 和 Builder 注解。为 id 定义 Id 和 GeneratedValue IDENTITY。为 name 和 email 定义 Column nullable false,email 还需设置 unique。为 status 定义 Enumerated STRING。为 orders 定义 OneToMany mappedBy user、cascade ALL 和 orphanRemoval true。

带自定义查询的仓库模式:

创建继承 JpaRepository 的 UserRepository。添加返回 Optional 的 findByEmail。添加返回 boolean 的 existsByEmail。为 findByIdWithOrders 添加带 LEFT JOIN FETCH 的 JPQL Query 注解,并使用 Param 注解。添加带 Pageable 的 findByNameContainingIgnoreCase,以支持分页。

使用 Record 定义 DTO 的模式:

创建包含 id、name、email 和 status 的 UserDto record。添加静态 from 工厂方法,用于从 User 实体构造 record。创建 CreateUserRequest record:name 添加 NotBlank 和 Size 注解,email 添加 NotBlank 和 Email 注解,password 添加 NotBlank 和 Size min 8 注解。


高级模式

集成虚拟线程

创建带有 Service 和 RequiredArgsConstructor 注解的 AsyncUserService。创建 fetchUserDetails 方法,在 try-with-resources 中使用 StructuredTaskScope.ShutdownOnFailure。为用户和订单查询派生任务,调用 join,并在失败时抛出异常,然后返回组合结果。创建 processUsersInParallel 方法,使用 newVirtualThreadPerTaskExecutor,并通过流式处理用户 ID 来提交处理任务。

构建配置

Maven 3.9 模式:

定义项目,并将 spring-boot-starter-parent 3.3.0 版本设为 parent。将 java.version 属性设为 21。添加 spring-boot-starter-web 和 spring-boot-starter-data-jpa 依赖。

Gradle 8.5 Kotlin DSL 模式:

应用 org.springframework.boot、io.spring.dependency-management 和 java 插件。将 toolchain 的 languageVersion 设为 21。为 web 和 data-jpa starter 添加 implementation 依赖,为 test starter 添加 testImplementation 依赖。

使用 JUnit 5 测试

单元测试模式:

创建带有 ExtendWith MockitoExtension 的测试类。为 UserRepository 添加 Mock 注解。为 UserService 添加 InjectMocks。创建 shouldCreateUser 测试,将 existsByEmail 存根设为返回 false,并将 save 存根设为返回带有 id 的用户。调用服务的 create 方法,并使用 assertThat 断言结果 id 等于 1。

使用 TestContainers 进行集成测试的模式:

创建带有 Testcontainers 和 SpringBootTest 注解的测试类。定义 PostgreSQL 的静态 Container,并使用 postgres:16-alpine 镜像。添加 DynamicPropertySource,以从容器设置 datasource.url。自动装配仓库。创建测试,保存用户并使用 assertThat 断言 id isNotNull。


Context7 集成

最新文档的库映射:

  • spring-projects/spring-boot,用于 Spring Boot 3.3 文档
  • spring-projects/spring-framework,用于 Spring Framework 核心
  • spring-projects/spring-security,用于 Spring Security 6
  • hibernate/hibernate-orm,用于 Hibernate 7 ORM 模式
  • junit-team/junit5,用于 JUnit 5 测试框架

搭配使用效果良好

  • moai-lang-kotlin,用于 Kotlin 互操作和 Spring Kotlin 扩展
  • moai-domain-backend,用于 REST API、GraphQL 和微服务架构
  • moai-domain-database,用于 JPA、Hibernate 和 R2DBC 模式
  • moai-foundation-quality,用于 JUnit 5、Mockito 和 TestContainers 集成
  • moai-infra-docker,用于 JVM 容器优化

故障排除

常见问题:

  • 版本不匹配:运行 java -version,并检查 JAVA_HOME 是否指向 Java 21
  • 编译错误:运行 mvn clean compile -X 或 gradle build --info
  • 虚拟线程问题:确保使用 Java 21+,并在需要时启用 --enable-preview
  • JPA 延迟加载:使用 Transactional 注解或 JOIN FETCH 查询

性能提示:

  • 将 spring.threads.virtual.enabled 设为 true,以启用虚拟线程
  • 使用 GraalVM Native Image 加快启动速度
  • 使用 HikariCP 配置连接池

高级文档

如需查阅全面的参考资料:

  • reference.md:Java 21 功能、Context7 映射和性能
  • examples.md:可用于生产环境的 Spring Boot 示例

最后更新:2026-01-11 状态:已可用于生产环境(v1.1.0)

评论

支持 Markdown