Все эти аннотации являются специализированными @Component. Они используются для автоматического обнаружения компонентов Spring с помощью сканирования classpath.
Основные различия заключаются в семантике и намеченном использовании:
@Component: Общая стереотипная аннотация для любого компонента Spring. Может использоваться для классов, которые не подпадают под более конкретные категории.@Repository: Обозначает класс, который выполняет роль репозитория данных. Spring предоставляет для классов с этой аннотацией автоматическое преобразование исключений, специфичных для используемого доступа к данным, в унифицированную иерархию исключений Spring.@Service: Обозначает класс в сервисном слое приложения. Обычно содержит бизнес-логику приложения. Используется для повышения читаемости кода и лучшей структуризации приложения.| Аннотация | Назначение | Семантика |
|---|---|---|
@Component | Общий компонент Spring | Общий, универсальный |
@Repository | Репозиторий данных | Доступ к данным, DAO |
@Service | Сервисный слой, бизнес-логика | Бизнес-логика, сервис |