Рубрики
Без рубрики

@Component vs @Repository и @Service весной

Узнайте о различиях между аннотациями @Component, @Repository и @Service и о том, когда их использовать.

Автор оригинала: baeldung.

1. введение

В этом кратком руководстве мы узнаем о различиях между @Component, @Repository, @Service аннотациями в Spring Framework.

Дальнейшее чтение:

Руководство по весне @Autowired

Аннотация квалификатора Spring @

2. Весенние аннотации

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

И в каждом слое у нас есть различные бобы. Проще говоря, для их автоматического обнаружения Spring использует аннотации сканирования путей к классам .

Затем он регистрирует каждый компонент в ApplicationContext .

Вот краткий обзор некоторых из этих аннотаций:

  • @Component -это общий стереотип для любого компонента, управляемого Spring
  • @Service аннотирует классы на уровне сервиса
  • @Repository аннотирует классы на уровне персистентности, которые будут действовать как репозиторий базы данных

У нас уже есть расширенная статья об этих аннотациях. Поэтому мы сосредоточимся только на различиях между ними.

3. В Чем Разница?

Основное различие между этими стереотипами заключается в том, что они используются для различной классификации. Когда мы аннотируем класс для автоматического обнаружения, мы должны использовать соответствующий стереотип.

Теперь давайте рассмотрим их более подробно.

3.1. @Компонент

Мы можем использовать @Component в приложении, чтобы пометить бобы как управляемые компоненты Spring . Spring только собирает и регистрирует бобы с помощью @Component и не ищет @Service и @Repository в целом.

Они зарегистрированы в ApplicationContext , потому что они сами аннотированы @Component :

@Component
public @interface Service {
}
@Component
public @interface Repository {
}

@Service и @Repository являются частными случаями @Component . Технически они одинаковы, но мы используем их для разных целей.

3.2. @Репозиторий

Задача @Repository состоит в том, чтобы перехватывать конкретные исключения персистентности и переосмысливать их как одно из унифицированных непроверенных исключений Spring .

Для этого Spring предоставляет PersistenceExceptionTranslationPostProcessor , который требуется добавить в контекст нашего приложения:

Этот постпроцессор бобов добавляет советник к любому бобу, который аннотирован с помощью @Repository.

3.3. @Сервис

Мы помечаем бобы с помощью @Service, чтобы указать, что он содержит бизнес-логику . Таким образом, нет никакой другой специальности, кроме использования его на уровне обслуживания.

4. Заключение

В этой статье мы узнали о различиях между @Component, @Repository, @Service аннотациями . Мы рассмотрели каждую аннотацию отдельно с областями их использования.

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