Gymterview
junior

Для чего нужны аннотации @Component, @Service, @Repository и @Controller?

Все эти аннотации являются стереотипными (stereotype annotations) и помечают класс как Spring-бин для обнаружения при сканировании компонентов.

Аннотация Слой Дополнительная функциональность
@Component Общий Базовая аннотация, без дополнительного поведения
@Service Бизнес-логика Чисто семантическая
@Repository Доступ к данным Автоматическая трансляция исключений в DataAccessException
@Controller Веб-контроллер Включает обработку маппинга запросов
Пример
@Component // общий компонент
public class EmailValidator { }

@Service // бизнес-логика
public class UserService { }

@Repository // доступ к данным
public class UserRepository { }

@Controller // веб-контроллер
public class UserController { }

С точки зрения IoC-контейнера все четыре аннотации работают одинаково – регистрируют бин. Различия: @Repository добавляет трансляцию исключений, @Controller включает обработку запросов, @Service – чисто семантическая.

На собеседовании: интервьюер хочет услышать, что это специализации @Component, и знание конкретных различий (особенно трансляция исключений в @Repository). Частая ошибка – использовать @Component для всех классов без разбора.