Почему Spring-данные повторяют некоторые постпроцессоры - PullRequest
0 голосов
/ 22 января 2019

Spring Framework уже регистрирует BeanPostProcessor, которые обертывают объект Proxy десятками Советов, включая TransactionInterceptor и PersistenceExceptionTranslationInterceptor.

Но я также заметил, что модуль данных Spring явно добавляет TransactionInterceptor и PersistenceExceptionTranslationInterceptor в список рекомендаций прокси, как в RepositoryFactoryBeanSupport#createRepositoryFactory

Так что особенного в RepositoryFactoryBeanSupport, чтобы явно добавить эти два совета, а не просто позволить им добавляться базовыми BPP (PersistenceExceptionTranslationPostProcessor и DefaultAdvisorAutoProxyCreator для преобразования исключений постоянства и синхронизации транзакций соответственно)?

1 Ответ

0 голосов
/ 22 января 2019

Я думаю, что это связано с тем, что интерфейсы репозитория не должны аннотироваться @Repository и, следовательно, не регистрироваться в контейнере componentScan из applicationContext. и, следовательно, не будет обработано с помощью bean-post.

И, следовательно, определение EnableJpaRepositories следующее:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(JpaRepositoriesRegistrar.class)
public @interface EnableJpaRepositories {

Итак, @EnableJpaRepositories выполняет работу, используя JpaRepositoriesRegistrar который делегирует регистрацию интерфейсов репозитория RepositoryConfigurationDelegate#registerRepositoriesIn.

И в таком случае требуется ручная регистрация ExceptionTranslator Advice и Transaction Advice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...