Comprehensive code review for Java 25 and Spring Boot 4 apps. Use when reviewing, checking, auditing, or analyzing Java/Spring Boot code (files, modules, PRs, or full codebases) for migration risks, Spring Boot 4 best practices, JSpecify null-safety, security vulnerabilities, performance bottlenecks, data access pitfalls, architecture boundaries (DDD/Hexagonal/Spring Modulith), or modern Java 25 usage.
Install with Tessl CLI
npx tessl i github:a-pavithraa/springboot-skills-marketplace --skill java25-springboot4-reviewerOverall
score
93%
Does it follow best practices?
Evaluation — 98%
↑ 1.29xAgent success when using this skill
Validation for skill structure
Version: Based on Java 25 (JDK 25) and Spring Boot 4.0.x (as of January 2026)
Note: Spring Boot 4 and Java 25 are actively evolving. Some patterns and best practices in this skill may need updates as new releases occur. Always consult official documentation for the latest guidance.
NEVER review without code context. ALWAYS ask for files or diff.
ALWAYS cite file paths and line numbers for findings.
MANDATORY baseline: Java 25 + Spring Boot 4.0.x (latest stable). Flag if build files show otherwise.
ANALYZE workload before architectural recommendations. Don't suggest virtual threads, reactive patterns, or architectural changes without understanding actual concurrency, traffic patterns, and workload characteristics. Pattern matching without analysis leads to inappropriate recommendations.
JSpecify is the null-safety baseline. Avoid org.springframework.lang annotations; use package-level @NullMarked + explicit @Nullable in type usage. Copy nullability annotations when overriding.
Prefer official Spring docs as source of truth. If a pattern in code conflicts with documented guidance, flag it and link to the official rule via the relevant reference files.
Ask:
| Focus | Load |
|---|---|
| Spring Boot 4 patterns | references/spring-boot-4-patterns.md |
| Java 25 adoption | references/java-25-features.md |
| Security | references/security-checklist.md |
| Performance | references/performance-patterns.md |
| Architecture | references/architecture-patterns.md |
| Null-safety | references/jspecify-null-safety.md |
| Spring Data JPA | Use the spring-data-jpa skill |
| Migration | Use the springboot-migration skill |
Pass A: Build + configuration
Pass B: API + correctness
Pass C: Package structure
Pass D: Data access
Pass E: Security
Pass F: Performance + resilience
java-25-features.md for threshold explanation)Order by severity and include:
Use this structure:
## Critical
- **[Category]**: Issue
- **File**: `path/to/File.java:123`
- **Impact**: What breaks or risks
- **Fix**: Specific change
## High / Medium / Low
...spring-boot-starter-web → spring-boot-starter-webmvc)@MockBean → @MockitoBean)package-info.java with @NullMarkedorg.springframework.lang annotations still in use@Nullable placed on fields/params instead of type usage@PreAuthorize)java-25-features.md)instanceof + cast| Don't | Do | Why |
|---|---|---|
| Review with no files | Ask for files/diff | Prevents generic advice |
| Skip null-safety checks | Load JSpecify guidance | Boot 4 APIs are null-safe |
| Treat all findings equally | Prioritize by severity | Focus on risk |
| Suggest sweeping rewrites | Recommend incremental fixes | Safer for PRs |
Ground every finding in code, prioritize risk, and align with Java 25 + Spring Boot 4 + JSpecify null-safety.
@PreAuthorizetools.jackson.*)@MockitoBean)java-25-features.md)Load all reference files and check:
❌ "This code has security issues" ✅ "SQL injection vulnerability at UserRepository.java:45 - use parameterized query"
Focus on:
Explain WHY something is a problem:
❌ "Use records" ✅ "Use records to reduce boilerplate and ensure immutability. This DTO has 50 lines of boilerplate that records eliminate."
Include code snippets showing the fix:
// ❌ Before
String query = "SELECT * FROM users WHERE id = " + userId;
// ✅ After
@Query("SELECT u FROM User u WHERE u.id = :userId")
User findByUserId(@Param("userId") Long userId);Frame feedback positively:
❌ "This is wrong" ✅ "Consider using pattern matching here to simplify the code and reduce casting"
Context: User asks to review a pull request
Actions:
java-25-features.md and spring-boot-4-patterns.mdContext: User requests security review
Actions:
security-checklist.mdContext: User reports slowness or wants optimization
Actions:
performance-patterns.mdContext: User wants to validate architecture or refactor
Actions:
architecture-patterns.mdContext: Codebase recently migrated to Spring Boot 4 / Java 25
Actions:
java-25-features.md and spring-boot-4-patterns.mdUser: "Can you review OrderService.java for any issues?"
Assistant:
OrderService.javajava-25-features.md, spring-boot-4-patterns.md, performance-patterns.md, security-checklist.md## Critical Issues
🚨 **Performance - N+1 Query**
- **File**: `OrderService.java:45`
- **Problem**: Lazy loading `order.getItems()` in a loop causes N+1 queries
- **Solution**: Use `@EntityGraph` or fetch join in repository
🚨 **Security - Missing Authorization**
- **File**: `OrderService.java:30`
- **Problem**: `deleteOrder()` has no authorization check
- **Solution**: Add `@PreAuthorize("hasRole('ADMIN') or #order.userId == authentication.principal.id")`
## Warnings
⚠️ **Migration - Old Jackson Import**
- **File**: `OrderService.java:5`
- **Problem**: Using `com.fasterxml..jackson.*`
- **Recommendation**: Update to `tools.jackson.*`
## Suggestions
💡 **Modern Java - Use Record for DTO**
- **File**: `OrderService.java:78-120`
- **Suggestion**: Replace `OrderDTO` class with record to eliminate 42 lines of boilerplateUser: "Review the entire order module for architecture issues"
Assistant:
order/ modulearchitecture-patterns.mdIf you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.