Что обозначает аннотация @Repository в Spring?

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

Ответ

@Repository — это стереотипная аннотация Spring, помечающая класс как репозиторий (компонент уровня доступа к данным — Data Access Object, DAO). Это специализированный вариант @Component.

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

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

Пример:

@Repository
public class JpaUserRepository implements UserRepository {
    @PersistenceContext
    private EntityManager em;

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

Практика: Аннотация часто используется в сочетании с @Transactional для декларативного управления транзакциями на уровне репозитория.