Ответ
@Repository — это стереотипная аннотация Spring, помечающая класс как компонент слоя доступа к данным (DAO).
Ключевые функции:
- Семантика: Чётко указывает, что класс является репозиторием (источником данных).
- Перехват исключений: Автоматически преобразует специфические исключения persistence-технологий (JDBC, JPA, Hibernate) в непроверяемые исключения Spring
DataAccessException. Это унифицирует обработку ошибок. - Сканирование компонентов: Как специализация
@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.