@Component vs @Repository и @Service in Spring
1. Вступление
В этом кратком руководстве мы узнаем о различиях между аннотациями@Component, @Repository, @Service в Spring Framework.
Дальнейшее чтение:
Руководство по весне @Autowired
Руководство по наиболее распространенному использованию аннотаций и классификаторов Springs @Autowired
Весна @Qualifier Аннотация
Одного @Autowired иногда недостаточно для устранения неоднозначности зависимостей. Вы можете связать более точно, используя аннотацию @Qualifier. @Primary также может помочь.
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. Мы рассмотрели каждую аннотацию отдельно с областями их использования.
В заключение, всегда рекомендуется выбирать аннотации на основе соглашений о слоях.