1. Введение
В этом кратком руководстве мы узнаем о различиях между аннотациями @Component, @Repository
и @Service
в Spring Framework.
2. Весенние аннотации
В большинстве типичных приложений у нас есть отдельные уровни, такие как доступ к данным, представление, обслуживание, бизнес и т. д.
Кроме того, в каждом слое у нас есть различные бобы. Для автоматического обнаружения этих bean-компонентов Spring использует аннотации сканирования путей к классам .
Затем он регистрирует каждый компонент в ApplicationContext
.
Вот краткий обзор некоторых из этих аннотаций:
@Component
— это общий стереотип для любого компонента, управляемого Spring.@Service
аннотирует классы на сервисном уровне.@Repository
аннотирует классы на уровне постоянства, который будет действовать как репозиторий базы данных.
У нас уже есть расширенная статья об этих аннотациях, поэтому здесь мы сосредоточимся на различиях между ними.
3. Что изменилось?
Основное различие между этими стереотипами заключается в том, что они используются для разных классификаций. Когда мы аннотируем класс для автоматического обнаружения, мы должны использовать соответствующий стереотип.
Теперь давайте пройдемся по ним более подробно.
3.1. @Составная часть
Мы можем использовать @Component в приложении, чтобы пометить bean-компоненты как управляемые компоненты Spring . Spring будет собирать и регистрировать bean-компоненты только с помощью @Component
и вообще не ищет @Service
и @Repository
.
Они зарегистрированы в ApplicationContext
, потому что они аннотированы @Component
:
@Component
public @interface Service {
}
@Component
public @interface Repository {
}
@Service
и @Repository
являются частными случаями @Component
. Технически они одинаковы, но мы используем их для разных целей.
3.2. @Репозиторий
Задача @Repository
состоит в том, чтобы перехватывать специфичные для постоянства исключения и повторно выдавать их как одно из унифицированных непроверенных исключений Spring .
Для этого Spring предоставляет PersistenceExceptionTranslationPostProcessor
, который нам необходимо добавить в контекст нашего приложения (уже включен, если мы используем Spring Boot):
<bean class=
"org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
Этот постпроцессор компонента добавляет советник к любому компоненту, аннотированному с помощью @Repository.
3.3. @Обслуживание
Мы помечаем bean-компоненты @Service, чтобы указать, что они содержат бизнес-логику . Помимо использования на сервисном уровне, у этой аннотации нет другого специального применения.
4. Вывод
В этой статье мы узнали о различиях между аннотациями @Component, @Repository
и @Service
. Мы рассмотрели каждую аннотацию отдельно, чтобы понять области их использования.
В заключение, всегда полезно выбирать аннотацию на основе их соглашений о слоях.