Ответ
Сервис — это класс, реализующий бизнес-логику приложения. В Spring он помечается аннотацией @Service, что позволяет Spring автоматически обнаружить его как компонент и управлять его жизненным циклом.
Ключевые особенности:
- Слой бизнес-логики: Сервисы инкапсулируют сложную логику, отделяя её от контроллеров (уровень представления) и репозиториев (уровень доступа к данным).
- Внедрение зависимостей: Сервисы обычно получают зависимости (например, репозитории) через конструктор с
@Autowired. - Транзакционность: Методы сервисов часто помечаются
@Transactionalдля управления транзакциями.
Пример сервиса в Spring:
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Transactional
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException("User not found with id: " + id));
}
}
Почему это важно: Такой подход обеспечивает разделение ответственности (принцип Single Responsibility), упрощает модульное тестирование (сервис можно легко замокать) и повышает переиспользуемость кода.