Ответ
@RequiredArgsConstructor — это аннотация проекта Lombok, которая генерирует конструктор для всех final полей и полей, помеченных @NonNull, во время компиляции. Это сокращает шаблонный код и обеспечивает неизменяемость (immutability) компонентов.
Как работает:
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor // Lombok сгенерирует конструктор
public class OrderService {
private final OrderRepository orderRepository; // final поле
private final PaymentService paymentService; // final поле
private String optionalField; // Не final — не войдет в конструктор
// Код сгенерированного конструктора:
// public OrderService(OrderRepository orderRepository, PaymentService paymentService) {
// this.orderRepository = orderRepository;
// this.paymentService = paymentService;
// }
}
Преимущества в Spring:
- Идеально для внедрения зависимостей: Поля
finalгарантируют, что все зависимости будут проинициализированы при создании бина. Spring автоматически внедряет бины через этот сгенерированный конструктор, что делает@Autowiredизбыточным. - Безопасность потоков:
finalполя способствуют созданию неизменяемых (thread-safe) бинов. - Читаемость: Убирает шаблонный код конструктора.
Альтернативы Lombok: Ручное написание конструктора или использование @Autowired на конструкторе.