Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем