此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

@Transactional与 AspectJ

您还可以使用 Spring Framework 的@Transactional弹簧外部的支撑 容器通过 AspectJ 方面。为此,请先对您的类进行注释 (以及可选的类的方法)与@Transactional注解 ,然后将您的应用程序与org.springframework.transaction.aspectj.AnnotationTransactionAspectspring-aspects.jar文件。您还必须使用事务配置方面 经理。您可以使用 Spring Framework 的 IoC 容器来处理 依赖注入方面。配置事务的最简单方法 管理方面是使用<tx:annotation-driven/>元素并指定mode属性设置为aspectj@Transactional. 因为我们在这里专注于在 Spring 容器之外运行的应用程序, 我们将向您展示如何以编程方式执行此作。spring-doc.cadn.net.cn

在继续之前,您可能需要阅读@TransactionalAOP 分别。

以下示例演示如何创建事务管理器并配置AnnotationTransactionAspect使用它:spring-doc.cadn.net.cn

// 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
使用此方面时,必须注释实现类(或方法 )而不是该类实现的接口(如果有)。方面J 遵循 Java 的规则,即接口上的注释不会被继承。

@Transactional类上的注释指定默认事务语义 用于执行类中的任何公共方法。spring-doc.cadn.net.cn

@Transactional类中方法的注释将覆盖默认值 类注释(如果存在)给出的交易语义。您可以注释任何方法 无论能见度如何。spring-doc.cadn.net.cn

要使用AnnotationTransactionAspect,您必须构建 使用 AspectJ 的应用程序(参见 AspectJ 开发 Guide)或使用加载时间编织。有关使用 AspectJ 进行加载时编织的讨论,请参阅 Spring Framework 中使用 AspectJ 进行加载时编织spring-doc.cadn.net.cn