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

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

Ответ

@Repository — это стереотипная аннотация Spring, помечающая класс как компонент слоя доступа к данным (DAO).

Ключевые функции:

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

Пример использования с JPA:

@Repository // Указывает на DAO-компонент и включает перевод исключений
public class UserRepositoryImpl implements UserRepository {
    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public User findById(Long id) {
        // Любое PersistenceException будет перехвачено и преобразовано
        return entityManager.find(User.class, id);
    }
}

Связь с Spring Data JPA: Интерфейсы, расширяющие JpaRepository, CrudRepository и т.д., не требуют явной аннотации @Repository, так как она уже присутствует в их реализации, создаваемой Spring.