> spring-boot-best-practices
Core coding standards, dependency injection, and configuration for Spring Boot 3. Use when applying Spring Boot 3 coding standards or configuring dependency injection. (triggers: application.properties, **/*Service.java, autowired, requiredargsconstructor, configuration-properties, slf4j)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/spring-boot-best-practices?format=md"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.
References
> related_skills --same-repo
> typescript-tooling
Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling. (triggers: tsconfig.json, .eslintrc.*, jest.config.*, package.json, eslint, prettier, jest, vitest, build, compile, lint)
> typescript-security
Secure coding practices for TypeScript. Use when validating input, handling auth tokens, sanitizing data, or managing secrets and sensitive configuration. (triggers: **/*.ts, **/*.tsx, validate, sanitize, xss, injection, auth, password, secret, token)
> typescript-language
Modern TypeScript standards for type safety and maintainability. Use when working with types, interfaces, generics, enums, unions, or tsconfig settings. (triggers: **/*.ts, **/*.tsx, tsconfig.json, type, interface, generic, enum, union, intersection, readonly, const, namespace)
> typescript-best-practices
Idiomatic TypeScript patterns for clean, maintainable code. Use when writing or refactoring TypeScript classes, functions, modules, or async logic. (triggers: **/*.ts, **/*.tsx, class, function, module, import, export, async, promise)