为什么Spring Data会重复一些后处理器

时间:2019-01-22 05:53:10

标签: spring spring-data

Spring框架已经注册了BeanPostProcessor,它确实通过包括TransactionInterceptorPersistenceExceptionTranslationInterceptor在内的数十种建议来包装Proxy对象。

但是我也注意到,spring-data模块将TransactionInterceptorPersistenceExceptionTranslationInterceptor显式添加到代理建议列表中,如RepositoryFactoryBeanSupport#createRepositoryFactory

那么RepositoryFactoryBeanSupport中显式添加这两个建议而不仅仅是让它们由框架BPP(分别用于持久性异常转换和事务同步的PersistenceExceptionTranslationPostProcessorDefaultAdvisorAutoProxyCreator)添加的特殊之处是什么?

1 个答案:

答案 0 :(得分:0)

我认为这与以下事实有关:不需要@Repository注释存储库接口,因此componentScan的{​​{1}}不会将其注册到容器中。因此不会进行bean后处理。

因此applicationContext的定义如下:

EnableJpaRepositories

因此,@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import(JpaRepositoriesRegistrar.class) public @interface EnableJpaRepositories { 通过使用@EnableJpaRepositories来完成工作 将存储库接口的注册委派给JpaRepositoriesRegistrar

在这种情况下,需要手动注册ExceptionTranslator建议和交易建议。