Какие отличия между @⁠Component, @⁠Service, @⁠Repository и @⁠Controller?



@Component простой способ сделать объявление класса объявлением Spring-бина. Из всех компонентов, которые попали в сканирование (о которых знает @ComponentScan), будут созданы бин-дефинишны.



Остальные аннотации – это алиасы аннотации @Component. Сами по себе они не добавляют поведения, и технически в рамках ядра Spring Framework работают так же.



Эти аннотации называют «Stereotype annotations». Их главное отличие – семантика, логическая роль компонентов:

• @⁠Service – реализация бизнес-логики;

• @⁠Repository – хранилище данных: «репозиторий» из Domain-Driven Design или классический DAO;

• @⁠Controller – обработка веб-запросов (методы @RequestMapping)



Сторонние компоненты могут пользоваться этой семантикой. Например, трансляция исключений Persistence API работает именно на компонентах стереотипа @Repository. Таким образом, в отдельных случаях кроме семантики может меняться и поведение кода библиотек.



#Spring



@javatg