在许多文章中,我读到以下内容"Spring 的声明式事务是通过 AOP 代理启用的"。
对于像我这样的新手来说,这到底意味着什么?
我可以在什么样的类或 bean 上使用 @Transactional 注释?
我必须在POM中添加maven依赖项"spring-aop"吗.xml?
是否明确需要@EnableTransactionManagement才能使交易工作?
已经有一个答案详细介绍了@Transactional
的作用和工作原理。
关于你的其他问题。
我可以在什么样的类或 bean 上使用
@Transactional
注释?
理论上,您想要的每个类。你应该这样做不。例如,在制作 Web 图层时,事务边界通常被认为是一个坏主意,因为服务层应该是事务边界。
我必须在
pom.xml
中添加 maven 依赖项spring-aop
吗?
不。spring-tx
依赖关系本身已经拉动了这一点。使用spring-boot-starter-data-jpa
(或其他与持久性相关的)时,它也将自动包含在内。
是否明确需要
@EnableTransactionManagement
才能使事务正常工作?
这要看情况。一般来说,在 Spring Boot 应用程序中,你不需要添加这个,因为 Spring Boot 会自动启用这个。如果你不使用 Spring Boot,而只是一个普通的 Spring 应用程序,那么在使用 XML 时,你需要添加@EnableTransactionManagement
或<tx:annotation-driven>
来告诉 Spring 处理@Transactional
注释。