Эти аннотации являются стереотипными аннотациями Spring DI, используемыми для обозначения компонентов по их назначению в архитектуре типичного веб-приложения:
@Controller: Помечает класс как контроллер, который обрабатывает входящие веб-запросы и возвращает ответы. Часто используется в MVC фреймворках.@Service: Помечает класс как компонент сервисного уровня, содержащий бизнес-логику.@Repository: Помечает класс как компонент уровня доступа к данным, отвечающий за взаимодействие с базой данных или другим хранилищем данных. Spring предоставляет функционал преобразования исключений из специфичных для технологии доступа к данным (например, SQLException) в иерархию исключений Spring DataAccessException.На уровне реализации все три аннотации, по сути, являются специализациями @Component и обеспечивают регистрацию бина в контексте Spring. Основное их отличие заключается в семантике и предоставляемом Spring функционале.