Ответ
@Repository — это стереотипная аннотация Spring, помечающая класс как репозиторий (компонент уровня доступа к данным — Data Access Object, DAO). Это специализированный вариант @Component.
Ключевые функции:
- Автоматическое преобразование исключений: Spring автоматически перехватывает специфичные для JDBC/Hibernate/JPA исключения (например,
SQLException,PersistenceException) и преобразует их в непроверяемые (unchecked) исключения SpringDataAccessException. Это обеспечивает единообразную обработку ошибок DAO, не зависящую от конкретной технологии доступа к данным. - Объявление бина: Как и
@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 для декларативного управления транзакциями на уровне репозитория.