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для всех классов без разбора.