Ответ
@Service — это стереотипная аннотация Spring, которая помечает класс как компонент, содержащий бизнес-логику приложения. Это специализированная форма аннотации @Component.
Назначение и особенности:
- Маркер бизнес-слоя: Указывает, что класс реализует правила и операции предметной области.
- Автосканирование: Классы с
@Serviceавтоматически обнаруживаются и регистрируются как бины в контексте Spring при включенном сканировании компонентов (@ComponentScan). - Семантика: Не добавляет новой функциональности по сравнению с
@Component, но улучшает читаемость кода и позволяет применять аспекты или обработчики, специфичные для сервисного слоя. - Область видимости: По умолчанию создается один синглтон-бин на все приложение.
Пример использования:
@Service // Регистрирует этот класс как бин Spring
public class OrderService {
private final OrderRepository orderRepository;
// Внедрение зависимости через конструктор
public OrderService(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
// Метод бизнес-логики
public Order createOrder(OrderRequest request) {
// Валидация, расчеты, вызов репозитория и т.д.
Order newOrder = new Order(request);
return orderRepository.save(newOrder);
}
}
Почему это важно: Использование @Service (вместо прямого @Component) делает архитектуру приложения более понятной, четко разделяя ответственность между слоями (сервисы, репозитории, контроллеры).