Разница в семантике и предназначении:
@Component: Базовая аннотация, обозначающая класс как управляемый компонент Spring. Spring сканирует такие классы и создает бины.@Repository: Специализация @Component, предназначенная для классов слоя доступа к данным (DAO). Spring предоставляет дополнительную функциональность для таких бинов, например, автоматический перевод исключений (Exception Translation).@Service: Специализация @Component, предназначенная для классов слоя бизнес-логики. Используется для обозначения сервисов, которые выполняют определенные бизнес-операции.@Controller: Специализация @Component, предназначенная для классов, обрабатывающих веб-запросы в MVC-архитектуре. Обычно используются вместе с аннотациями для маппинга запросов (@RequestMapping, @GetMapping, @PostMapping и т.д.).Все эти аннотации являются стереотипными аннотациями. Они не предоставляют новую функциональность сами по себе, кроме как способствуют сканированию компонентов. Их главное преимущество – повышение читаемости кода и ясность структуры приложения. Spring также может применять специфические автоконфигурации или провайдеры для бинов, помеченных этими аннотациями.