вот объяснение, почему нам нужна такая специализация ...
В Spring 2.0 и более поздних версиях аннотация @Repository является маркером для любого класса, который
выполняет роль или стереотип (также известный как объект доступа к данным или DAO) хранилища. Среди применений этого маркера - автоматический перевод исключений.
Spring 2.5 представляет дополнительные стереотипные аннотации: @Component, @Service и @Controller. @Component - это общий стереотип для любого компонента, управляемого Spring. @Repository, @Service и @Controller являются специализациями @Component для более конкретных случаев использования, например, для уровней персистентности, службы и представления соответственно.
Таким образом, вы можете аннотировать классы компонентов с помощью @Component, но, вместо этого, аннотируя их с помощью @Repository, @Service или @Controller, ваши классы лучше подходят для обработки инструментами или связи с аспектами. Например, эти аннотации стереотипов делают идеальные цели для pointcuts.
Таким образом, если вы выбираете между использованием @Component или @Service для своего уровня обслуживания, @Service, безусловно, является лучшим выбором. Аналогично, как указано выше, @Repository уже поддерживается в качестве маркера для автоматического преобразования исключений в вашем слое постоянства.