Spring框架已经注册了BeanPostProcessor
,它确实通过包括TransactionInterceptor
和PersistenceExceptionTranslationInterceptor
在内的数十种建议来包装Proxy对象。
但是我也注意到,spring-data模块将TransactionInterceptor
和PersistenceExceptionTranslationInterceptor
显式添加到代理建议列表中,如RepositoryFactoryBeanSupport#createRepositoryFactory
那么RepositoryFactoryBeanSupport
中显式添加这两个建议而不仅仅是让它们由框架BPP(分别用于持久性异常转换和事务同步的PersistenceExceptionTranslationPostProcessor
和DefaultAdvisorAutoProxyCreator
)添加的特殊之处是什么?
答案 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建议和交易建议。