我试图了解在@EnableTransactionManagement多个JavaConfig上下文中放置注释的正确位置在哪里?
@EnableTransactionManagement
考虑以下情形:我在JPAConfig.java和AppConfig.java中具有服务bean集的JPA配置。然后,在RootConfig.java中编写整个应用程序配置。
我在JPAConfig.java中定义事务管理器,并启用对JPA存储库的扫描- 当这些暴露事务行为时,我将其放到@EnableTransactionManagementJPAConfig上,并且它可以工作。
但是,某些服务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 { }
感谢任何建议。
经过一些实验,我似乎自己找到了答案:
internalTransactionAdvisor
@Transactional
@Import
PersistenceConfig
@EnableGlobalMethodSecurity
UserDetailsContextMapper