en un clic
spring-boot-3
// Spring Boot 3 patterns for configuration, DI, and web services. Trigger: When building or refactoring Spring Boot 3 applications.
// Spring Boot 3 patterns for configuration, DI, and web services. Trigger: When building or refactoring Spring Boot 3 applications.
| name | spring-boot-3 |
| description | Spring Boot 3 patterns for configuration, DI, and web services. Trigger: When building or refactoring Spring Boot 3 applications. |
| metadata | {"author":"diegnghrmr","version":"1.0"} |
Load this skill when:
Always use constructor injection; avoid field injection.
Use @ConfigurationProperties with validation, not scattered @Value.
Apply @Transactional on application services, not controllers.
package com.acme.config;
import jakarta.validation.constraints.NotBlank;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@Validated
@ConfigurationProperties(prefix = "payment")
public record PaymentProperties(
@NotBlank String provider,
@NotBlank String apiKey
) { }
package com.acme;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@ConfigurationPropertiesScan
public class Application { }
package com.acme.order.application;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public final class OrderService {
private final OrderRepository repository;
public OrderService(OrderRepository repository) {
this.repository = repository;
}
@Transactional
public void placeOrder(OrderCommand command) {
repository.save(command.toEntity());
}
}
package com.acme.order.api;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/orders")
public final class OrderController {
private final OrderService service;
public OrderController(OrderService service) {
this.service = service;
}
@PostMapping
public ResponseEntity<OrderResponse> place(@RequestBody OrderRequest request) {
service.placeOrder(request.toCommand());
return ResponseEntity.ok(new OrderResponse("ok"));
}
public record OrderRequest(String sku, int qty) {
public OrderCommand toCommand() { return new OrderCommand(sku, qty); }
}
public record OrderResponse(String status) { }
}
// BAD: field injection
@Service
public class OrderService {
@org.springframework.beans.factory.annotation.Autowired
private OrderRepository repository;
}
// BAD: hard to validate and test
@Service
public class PaymentService {
@org.springframework.beans.factory.annotation.Value("${payment.apiKey}")
private String apiKey;
}
| Task | Pattern |
|---|---|
| Inject dependencies | Constructor injection only |
| Read config | @ConfigurationProperties + @Validated |
| Transactions | @Transactional on services |
Hexagonal architecture layering for Java services with strict boundaries. Trigger: When structuring Java apps by Domain/Application/Infrastructure, or refactoring toward clean architecture.
Java 21 language and runtime patterns for modern, safe code. Trigger: When writing Java 21 code using records, sealed types, or virtual threads.
Core catalog of 8 critical Elixir/Phoenix anti-patterns covering error handling, separation of concerns, Ecto queries, and testing. Trigger: During Elixir code review, refactoring sessions, or when writing Phoenix/Ecto code.
React Native patterns for mobile app development with Expo and bare workflow. Trigger: When building mobile apps, working with React Native components, using Expo, React Navigation, or NativeWind.
Electron patterns for building cross-platform desktop applications. Trigger: When building desktop apps, working with Electron main/renderer processes, IPC communication, or native integrations.
Angular core patterns: standalone components, signals, inject, control flow, zoneless. Trigger: When creating Angular components, using signals, or setting up zoneless.