Вопрос с собеседования · Spring

Чем @Repository отличается от @Component помимо семантики?

MiddleСтереотипы и автосвязываниеSpringSpring Data
Ещё спрашивают так:
  • Зачем нужна аннотация @Repository?
Коротко

@Repository включает трансляцию исключений: SQLException и исключения JPA превращаются в единую иерархию DataAccessException (DuplicateKeyException, DataIntegrityViolationException и др.).

  • Работает через PersistenceExceptionTranslationPostProcessor и прокси
  • Код сервиса не зависит от конкретной технологии доступа
  • Репозитории Spring Data транслируют исключения сами

А ещё Семантически — маркер слоя доступа к данным

Подробно

Все стереотипы — это @Component с уточнённым смыслом, и для @Service и @Controller разница действительно только семантическая плюс возможность точечно нацелить аспект. Но @Repository несёт реальное поведение: PersistenceExceptionTranslationPostProcessor заворачивает такой бин в прокси и переводит SQLException, JPA-исключения и прочую технологическую специфику в неконтролируемые DataAccessException. Смысл в том, что сервисный слой перестаёт зависеть от способа доступа к данным. Транзакции при этом не появляются — их даёт только @Transactional.

Что хотят услышать

  • Трансляция исключений и иерархия DataAccessException.
  • Как она реализована.

Частые ошибки

  • Думать, что @Repository открывает транзакцию.
  • Считать все стереотипы полностью взаимозаменяемыми.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Трансляция исключений доступа к данным в DataAccessException
  • ✗Автоматически оборачивает все методы класса в транзакцию на запись
  • ✗Создаёт бин со scope prototype вместо singleton
  • ✗Различий нет — это просто разные названия одного и того же

Что спросят дальше

  • Зачем DataAccessException сделаны unchecked?
  • Как стереотипы используются для точечной настройки аспектов?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования