Эти аннотации являются стереотипами Spring, используемыми для маркировки компонентов приложения. Разница заключается в их семантическом назначении и функциональности, которую может добавлять Spring.
@Component: Общая аннотация для любого управляемого Spring компонента. Используется для классов общего назначения.@Repository: Применяется к классам из уровня доступа к данным (DAO). Spring может автоматически переводить специфичные исключения для доступа к данным (например, SQLException) в Spring'овские исключения (например, DataAccessException), что упрощает обработку.@Service: Используется для классов из сервисного слоя. Хотя на первый взгляд не добавляет специальной функциональности по сравнению с @Component, служит для лучшей структуризации кода и явного указания роли компонента.Эти аннотации помогают Spring'у понять структуру приложения и применять соответствующую обработку (например, транзакции для @Repository или @Service).
Пример использования:
java