@EnableTransactionManagement的范围是什么?
我试图了解在@EnableTransactionManagement
多个JavaConfig上下文中放置注释的正确位置在哪里?
考虑以下情形:我在JPAConfig.java和AppConfig.java中具有服务bean集的JPA配置。然后,在RootConfig.java中编写整个应用程序配置。
我在JPAConfig.java中定义事务管理器,并启用对JPA存储库的扫描-
当这些暴露事务行为时,我将其放到@EnableTransactionManagement
JPAConfig上,并且它可以工作。
但是,某些服务Bean还需要具有事务处理方法,例如访问单个事务中的多个存储库。我是否也应该@EnableTransactionManagement
覆盖AppConfig?在我看来,研究这种注释的实现似乎会导致重新定义某些bean。实际上,这样做似乎对我不起作用。
@Configuration@EnableTransactionManagement
@EnableJpaRepositories("com.mypackage.repositories")
public class JPAConfig {
// ... here are EntityManager and PlatformTransactionManager beans
}
@Configuration
@ComponentScan("com.mypackage.services")
// @EnableTransactionManagement // - ???
public class AppConfig {
}
@Configuration
@Import({AppConfig.class, JPAConfig.class})
public class RootConfig {
}
感谢任何建议。
回答:
经过一些实验,我似乎自己找到了答案:
@EnableTransactionManagement
尽管在注册internalTransactionAdvisor
实际处理@Transactional
创建的bean上的注释的注册时发现该注释有多早,但这并不需要对每个上下文配置进行配置。- 就我而言,我改变了上下文的顺序
@Import
声明,使PersistenceConfig
持有@EnableTransactionManagement
是第一。此后其他bean可以使用AOP声明式事务。 - 另一个警告与同时使用
@EnableTransactionManagement
和有关@EnableGlobalMethodSecurity
。全局方法安全性使用bean后处理,这似乎需要连接整个安全性配置。BeanPostProcessors是在上下文启动时就创建的,因此您不能@Transactional
在引导Spring安全性所需的任何bean中使用声明式(在我的情况下UserDetailsContextMapper
)-那时还没有创建Advisor!
以上是 @EnableTransactionManagement的范围是什么? 的全部内容, 来源链接: utcz.com/qa/406980.html