Для чего используются стереотипные аннотации в Spring?

«Для чего используются стереотипные аннотации в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стереотипные аннотации в Spring используются для автоматического обнаружения и регистрации классов как компонентов (beans) в контексте приложения Spring (ApplicationContext). Они являются частью механизма автоматического сканирования компонентов.

Основные стереотипные аннотации:

  • @Component — универсальный стереотип, помечающий класс как управляемый Spring'ом компонент.
  • @Service — указывает, что класс содержит бизнес-логику. Семантический вариант @Component.
  • @Repository — помечает класс как слой доступа к данным (DAO). Автоматически транслирует исключения доступа к данным в Spring-специфичные DataAccessException.
  • @Controller / @RestController — помечают класс как контроллер в веб-приложении (MVC или REST API).

Пример:

@Service // Spring обнаружит и создаст bean этого класса
public class UserService {
    @Autowired
    private UserRepository repository;
    // бизнес-логика
}

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

Зачем они нужны:

  1. Автоконфигурация: Избавляют от необходимости явного объявления каждого bean в XML или Java-конфигурации.
  2. Четкая архитектура: Разные аннотации визуально разделяют слои приложения (сервис, репозиторий, контроллер).
  3. Дополнительная функциональность: Аннотации несут семантику. Например, @Repository добавляет обработку исключений.