多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 带有加载时织入的非公开方法上的 Spring 事务 > 原文: [https://howtodoinjava.com/spring-transaction/spring-transactions-on-non-public-methods-with-load-time-weaving/](https://howtodoinjava.com/spring-transaction/spring-transactions-on-non-public-methods-with-load-time-weaving/) 在本教程中,我们将学习如何在非公开方法上的任何 Spring 应用程序中应用事务(通过默认 [**spring AOP**](https://howtodoinjava.com/spring/spring-aop/top-spring-aop-interview-questions-with-answers/) 只能对 [IoC 容器](https://howtodoinjava.com/spring/spring-core/different-spring-3-ioc-containers-with-example/)中的 bean 的公共方法配置建议)。 使用此技术,您可以管理非公共方法的事务,也可以管理在 Spring IoC 容器外部创建的对象(即不受 IoC 容器管理)中的任何方法上的事务。 ## 使用`AnnotationTransactionAspect`管理事务 Spring 具有一个名为`AnnotationTransactionAspect`的 AspectJ 切面,它可以管理任何对象的任何方法的事务,即使这些方法是非公开的或对象是在 Spring IoC 容器外部创建的也是如此。 该切面将管理带有`@Transactional`注解的任何方法的事务。 要启用此有用的切面,您可以通过以下两种方式之一来更改配置: 1. `@EnableLoadTimeWeaving`注解 2. `<context:load-time-weaver />`; 组态 #### 使用`@EnableLoadTimeWeaving`注解 必须在配置类上使用`@EnableLoadTimeWeaving`注解以在加载时获取。 您需要做的就是定义`@EnableTransactionManagement`注解并将其`mode`属性设置为`Aspectj`。 **切面**说,容器应使用加载时或编译时织入来启用事务通知。 另一个值**代理**表示容器应使用默认的 Spring AOP 机制。 请务必注意,aspect 模式不支持在接口上配置`@Transactional`注解(应仅在类上使用)。 配置示例如下所示: ```java @Configuration @EnableTransactionManagement(mode = AdviceMode.ASPECTJ) @EnableLoadTimeWeaving public class MyApplicationConfiguration { //Configuration code } ``` #### 使用`<context:load-time-weaver/>`配置 如果您在应用程序中使用了基于 XML 的配置,则可以使用以下配置更改来启用此功能。 ```java <beans> <context:load-time-weaver /> <tx:annotation-driven mode="aspectj"/> <!-- Other beans declarations--> </beans> ``` 要启用加载时织入,还必须包括`spring-instrument`模块。 如果您使用的是 Maven,请将以下依赖项添加到您的项目中。 ```java <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-instrument</artifactId> <version>${spring.version}</version> </dependency> ``` 在下面将您的问题和评论丢给我。 **祝您学习愉快!** **参考**: [http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-aj-ltw](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-aj-ltw)