Spring Boot Best Practices
Priority: P0
Implementation Guidelines
Dependency Injection (DI)
- •Constructor Injection: ALWAYS use constructor injection (via
@RequiredArgsConstructor) for immutability. - •Final Fields: Mark all dependencies as
final. - •Avoid @Autowired: Do not use field injection. It hides dependencies.
Configuration
- •Type-Safe Config: Use
@ConfigurationPropertieswith Records instead of@Value. - •Validation: Combine with
@Validatedand Jakarta constraints (@NotNull) to fail fast. - •Externalization: Follow strict precedence (Env vars > Config files).
Observability & Logging
- •SLF4J: Use
@Slf4j. NEVER useSystem.out. - •Structured Logging: Log arguments (
log.info("id: {}", id)), not concatenated strings.
Anti-Patterns
- •Field Injection:
**No @Autowired on fields**: Use constructor injection. - •Mutable Components:
**No Setters**: Use final fields. - •Manual Bean Lookup:
**No context.getBean()**: Inject dependencies. - •Swallowed Exceptions:
**No log-and-swallow**: Rethrow or handle cleanly.