Ответ 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 уже поддерживается как маркер для автоматический перевод исключений в вашем уровне персистентности.