Какие отличия между @Component, @Service, @Repository и @Controller?@Component
– простой способ сделать объявление класса объявлением
Spring-бина. Из всех компонентов, которые попали в сканирование (о которых знает
@ComponentScan
), будут созданы бин-дефинишны.
Остальные аннотации – это алиасы аннотации
@Component
. Сами по себе они не добавляют поведения, и технически в рамках ядра Spring Framework работают так же.
Эти аннотации называют «Stereotype annotations». Их главное отличие – семантика, логическая роль компонентов:
• @Service – реализация бизнес-логики;
• @Repository – хранилище данных: «репозиторий» из
Domain-Driven Design или классический DAO;
• @Controller – обработка веб-запросов (методы
@RequestMapping
)
Сторонние компоненты могут пользоваться этой семантикой. Например,
трансляция исключений Persistence API работает именно на компонентах стереотипа
@Repository
. Таким образом, в отдельных случаях кроме семантики может меняться и поведение кода библиотек.
#Spring