Всегда ли необходимо использовать аннотацию @Repository в Spring?

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

Ответ

Нет, использование @Repository не всегда строго обязательно, но оно является best practice для слоя доступа к данным (DAO).

Преимущества @Repository перед @Component:

  • Семантика: Четко обозначает класс как компонент DAO-слоя.
  • Обработка исключений: Автоматически перехватывает специфичные для persistence-технологий исключения (например, SQLException, HibernateException) и трансформирует их в непроверяемые исключения Spring DataAccessException. Это позволяет абстрагироваться от конкретной реализации JDBC или ORM.

Когда можно обойтись без @Repository:

  1. Если класс уже помечен как @Component, @Service и т.д. — он все равно будет обнаружен и создан как бин.
  2. При использовании Spring Data JPA. Интерфейсы, расширяющие JpaRepository, автоматически рассматриваются как репозитории, и явная аннотация не требуется.

Пример:

// Без @Repository (менее предпочтительно)
@Component
public class ClassicUserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    // ... методы, бросающие SQLException
}

// С @Repository (рекомендуется)
@Repository
public class ClassicUserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    // Исключения будут автоматически переведены в DataAccessException
}

Вывод: Для явных DAO-классов всегда используйте @Repository для включения семантики и обработки исключений.