Перейти к основному содержимому

@Component против @Repository и @Service весной

· 2 мин. чтения

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 . Мы рассмотрели каждую аннотацию отдельно, чтобы понять области их использования.

В заключение, всегда полезно выбирать аннотацию на основе их соглашений о слоях.