Каково назначение аннотации @Repository в Spring Data?

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

Ответ

Аннотация @Repository в Spring Data помечает класс как компонент слоя доступа к данным (DAO). Она выполняет две основные функции:

  1. Стереотип Spring: Автоматически регистрирует класс как bean в контексте Spring, аналогично @Component, но с семантикой репозитория.
  2. Обработка исключений: Преобразует специфичные исключения от технологий доступа к данным (JDBC, Hibernate, JPA) в непроверяемые исключения Spring DataAccessException. Это обеспечивает единообразную обработку ошибок и избавляет от привязки к конкретной реализации.

Пример объявления:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByEmail(String email);
}

Почему это важно: Использование @Repository вместо @Component явно указывает на роль класса и активирует дополнительную инфраструктурную поддержку (перехват исключений). В Spring Data JPA реализация интерфейса с этой аннотацией создается автоматически.