@Component vs @Repository и @Service in Spring

@Component vs @Repository и @Service in Spring

 

1. Вступление

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

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

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

Руководство по наиболее распространенному использованию аннотаций и классификаторов Springs @Autowired

Read more

Весна @Qualifier Аннотация

Одного @Autowired иногда недостаточно для устранения неоднозначности зависимостей. Вы можете связать более точно, используя аннотацию @Qualifier. @Primary также может помочь.

Read more

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

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

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

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

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

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

  • @Service аннотирует классы на уровне сервиса

  • @Repository аннотирует классы на уровне сохраняемости, который будет действовать как репозиторий базы данных

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

3. Что по-другому?

The major difference between these stereotypes is they are used for different classification. Когда мы добавляем аннотацию к классу для автоматического обнаружения, мы должны использовать соответствующий стереотип.

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

3.1. @Componentс

We can use @Component across the application to mark the beans as Spring’s managed components. Spring только собирает и регистрирует beans с помощью@Component  и не ищет@Service и@Repository в целом.

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

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

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

3.2. @Repositoryс

@Repository’s job is to catch persistence specific exceptions and rethrow them as one of Spring’s unified unchecked exception.

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

Этот постпроцессор bean добавляет советника к любому bean-компоненту, помеченному@Repository.

3.3. @Serviceс

We mark beans with @Service to indicate that it’s holding the business logic. Таким образом, нет никакой другой специальности, кроме использования ее на уровне обслуживания.

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

In this write-up, we learned about the differences between  @Component, @Repository, @Service annotations. Мы рассмотрели каждую аннотацию отдельно с областями их использования.

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