Добавление собственного кода в репозитории Spring Data Common

Для самых тяжёлых случаев Data Common поддерживает подмешивание собственного кода к генерируемым репозиториями.

Код примеров ниже основан на коде из статьи Hello, Spring Data JPA

Добавление кода к конкретному репозиторию

Все не просто, а очень просто. Вначале необходимо описать интерфейс с методами, которые необходимо добавить:

И потом подмешать его к интерфейсам вашего репозитория:

Наконец, необходимо реализовать код дополнительных методов:

Реализация интерфейса представляет собой обычный Spring bean, в котором можно использовать любой функционал Spring. Например, я внедрил EntityManagerFactory и обращаюсь к нему.

На реализацию интерфейса накладывается одно интересное ограничение — имя класса должно заканчиваться на Impl, чтобы Spring смог распознать реализацию и связать её с репозиторием. Впрочем, суффикс можно изменить настройками, в частности параметром repositotyImplementationPostfix аннотации @EnableJpaRepositories

Добавления кода ко всем репозиториям

Spring Data Common позволяет определить базовый интерфейс, от реализации которого автоматически будут унаследованы все остальные репозитории. Как и в случае с одним репозиторием, требуется определить отдельно интерфейс, отдельно реализацию:

Метод выше достаточно бессмысленен, но хорошо показывает принцип.

Наконец, надо указать Spring Data Common где найти реализацию общего репозитория:

И после этого можно наследовать ваши репозитории от базового интерфейса:

Код примера доступен на github