本文主要是介绍具有加载时编织的非公共方法的Spring事务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
具有加载时编织的非公共方法的Spring事务
在本教程中,我们将学习在任何spring应用程序中对非公共方法应用事务(通过deault spring AOP只能建议在IoC容器中声明的bean的公共方法)。使用此技术,您可以管理非公共方法的事务,或者将任何方法管理到在Spring IoC容器外部创建的对象(即不由IoC容器管理)。
使用AnnotationTransactionAspect管理事务
Spring有一个AspectJ方面AnnotationTransactionAspect
,它可以管理任何对象的任何方法的事务,即使这些方法是非公共的,或者对象是在Spring IoC容器之外创建的。
此方面将使用@Transactional
注释管理任何方法的事务。要启用此有用方面,您可以使用以下两种方式之一更改配置:
@EnableLoadTimeWeaving
注解<context:load-time-weaver />
; 组态
使用@EnableLoadTimeWeaving注释
必须在配置类上使用@EnableLoadTimeWeaving注释以在加载时拾取。您需要做的就是定义@EnableTransactionManagement
注释并将其mode属性设置为aspectj。
aspect表示容器应使用加载时或编译时编织来启用事务建议。另一个值代理表示容器应该使用默认的Spring AOP机制。
值得注意的是,aspect模式不支持在接口上配置@Transactional注释(仅应在类上使用)。
示例配置如下所示:
@Configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving
public class MyApplicationConfiguration
{ //Configuration code
}
使用<context:load-time-weaver />配置
如果您在应用程序中使用了基于XML的配置,则可以使用以下配置更改来启用此功能。
<beans><context:load-time-weaver /><tx:annotation-driven mode="aspectj"/> <!-- Other beans declarations--></beans>
要启用加载时间编织,您还必须包含弹簧仪器模块。如果您使用的是Maven,请将以下依赖项添加到项目中。
<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>
这篇关于具有加载时编织的非公共方法的Spring事务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!