Spring имеет аннотацию @Component, какова истинная цель аннотаций @Repository, @Service, @Controller?

Я разработал веб-приложения в течение нескольких лет с помощью рамки Spring. Недавно моя команда задала мне вопрос, Spring имеет аннотацию @Component, какова истинная цель аннотаций @Repository, @Service, @Controller? Я попытался дать ему ответ, что между ними нет различий, только для определения типов java Bean. Как вы знаете, в моем объяснении не хватает убеждения, он не покупал его.

Итак, я хочу задать вопрос, какова истинная цель аннотаций @Repository, @Service, @Controller? какова реальная разница между этими аннотациями?

Ответ 1

Этот вопрос задавали раньше: В чем разница между @Component, @Repository и аннотациями @Service в Spring?

В Spring 2.0 и более поздних версиях аннотация @Repository является маркером для любой класс, который выполняет роль или стереотип (также известный как Data Access Object или DAO) репозитория. Среди применений этого маркера является автоматическим переводом исключений.

Spring 2.5 вводит дополнительные аннотации к стереотипам: @Component, @Service и @Controller. @Component - общий стереотип для любого Spring - управляемый компонент. @Repository, @Service и @Controller - специализации @Component для более конкретных случаев использования, для например, в уровнях персистентности, обслуживания и представления, соответственно.

Поэтому вы можете комментировать классы компонентов с помощью @Component, но аннотируя их с помощью @Repository, @Service или @Controller вместо этого ваши классы более подходят для обработки инструментами или связывание с аспектами. Например, эти аннотации для стереотипов сделать идеальные цели для pointcut.

Таким образом, если вы выбираете между использованием @Component или @Service для ваш сервисный уровень, @Service, безусловно, лучший выбор. По аналогии, как указано выше, @Repository уже поддерживается как маркер для автоматический перевод исключений в вашем уровне персистентности.