@Service против @Controller
@Service: class - это «фасад бизнес-службы» (в смысле паттернов Core J2EE) или что-то подобное.
@Controller: указывает, что аннотированный класс является «контроллером» (например, веб-контроллером).
---------- Найдите полезные примечания по основным стереотипам
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Component.html
@interface Компонент
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
public @interface Component
Указывает, что аннотированный класс является компонентом. Такие классы считаются кандидатами на автоматическое обнаружение при использовании конфигурации на основе аннотаций и сканирования пути к классам.
Другие аннотации уровня класса также могут рассматриваться как идентифицирующие компонент, обычно это особый вид компонента: например, аннотация @Repository или аннотация AspectJ @Aspect.
@interface Контроллер
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
Указывает, что аннотированный класс является «Контроллером» (например, веб-контроллером).
Эта аннотация служит специализацией @Component, позволяя автоматически определять классы реализации посредством сканирования пути к классам. Обычно он используется в сочетании с аннотированными методами обработчика на основе аннотации RequestMapping.
@ интерфейс Сервис
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Service
Указывает, что аннотированный класс является «Сервисом», первоначально определенным в Domain-Driven Design (Evans, 2003) как «операция, предлагаемая как интерфейс, стоящий отдельно в модели, без инкапсулированного состояния». Также может указывать на то, что класс представляет собой «фасад бизнес-службы» (в смысле паттернов Core J2EE) или что-то подобное. Эта аннотация представляет собой стереотип общего назначения, и отдельные команды могут сузить свою семантику и использовать ее по мере необходимости.
Эта аннотация служит специализацией @Component, позволяя автоматически определять классы реализации посредством сканирования пути к классам.
Репозиторий @interface
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Repository
Указывает, что аннотированный класс является «репозиторием», первоначально определенным Domain-Driven Design (Evans, 2003) как «механизм для инкапсуляции поведения при хранении, извлечении и поиске, который имитирует набор объектов». Команды, реализующие традиционные шаблоны J2EE, такие как «объект доступа к данным», также могут применять этот стереотип к классам DAO, хотя перед этим необходимо понять разницу между объектом доступа к данным и репозиториями в стиле DDD. Эта аннотация представляет собой стереотип общего назначения, и отдельные команды могут сузить свою семантику и использовать ее по мере необходимости.
Аннотированный таким образом класс имеет право на преобразование Spring DataAccessException при использовании вместе с PersistenceExceptionTranslationPostProcessor. Аннотированный класс также поясняется в отношении его роли в общей архитектуре приложения с точки зрения инструментов, аспектов и т. Д.
Начиная с Spring 2.5, эта аннотация также служит специализацией @Component, позволяя автоматически определять классы реализации посредством сканирования пути к классам.