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