使用 @Transactional 与 AspectJ
您还可以通过 AspectJ 方面在 Spring 容器之外使用 Spring 框架的@Transactional
支持。为此,首先使用@Transactional
注解注释您的类(以及可选的类的 方法),然后将您的应用程序与spring-aspects.jar
文件中定义的org.springframework.transaction.aspectj.AnnotationTransactionAspect
链接(编织)。您还必须使用事务管理器配置方面。您可以使用 Spring 框架的 IoC 容器来处理依赖注入方面。配置事务管理方面的最简单方法是使用<tx:annotation-driven/>
元素并将mode
属性指定为aspectj
,如使用@Transactional
中所述。因为我们这里关注的是在 Spring 容器之外运行的应用程序,所以我们向您展示如何以编程方式执行此操作。
在继续之前,您可能需要分别阅读使用@Transactional 和AOP。 |
以下示例显示了如何创建事务管理器并配置AnnotationTransactionAspect
以使用它
-
Java
-
Kotlin
// construct an appropriate transaction manager
DataSourceTransactionManager txManager = new DataSourceTransactionManager(getDataSource());
// configure the AnnotationTransactionAspect to use it; this must be done before executing any transactional methods
AnnotationTransactionAspect.aspectOf().setTransactionManager(txManager);
// construct an appropriate transaction manager
val txManager = DataSourceTransactionManager(getDataSource())
// configure the AnnotationTransactionAspect to use it; this must be done before executing any transactional methods
AnnotationTransactionAspect.aspectOf().transactionManager = txManager
当您使用此方面时,必须注释实现类(或该类中的方法或两者),而不是类实现的接口(如果有)。AspectJ 遵循 Java 的规则,即接口上的注释不会被继承。 |
类上的@Transactional
注解指定了类中任何公共方法执行的默认事务语义。
类中方法上的@Transactional
注解覆盖了类注解(如果存在)给出的默认事务语义。您可以注释任何方法,无论可见性如何。
要将您的应用程序与AnnotationTransactionAspect
编织在一起,您必须使用 AspectJ 构建您的应用程序(请参阅AspectJ 开发指南)或使用加载时编织。有关使用 AspectJ 进行加载时编织的讨论,请参阅Spring 框架中的 AspectJ 加载时编织。