spring 声明式事务管理

2018-07-18  本文已影响0人  nerowu

本节阐述在事务相关的问题上,Spring框架的声明式事务管理的内部工作原理。

关于Spring框架的声明式事务支持,最重要的概念是,这种支持是通过AOP代理实现的,并且事务建议是由元数据(当前的XML或基于注解的)驱动的。AOP与事务性元数据的结合产生了一个AOP代理,它使用transaction拦截器与适当的PlatformTransactionManager implementation一起来驱动围绕方法调用的事务。

从概念上讲,在事务代理上调用一个方法是这样……

以下声明式事务管理的例子。此例只为说明上图的实现过程,作为springboot时代这套配置早已过时,但它体现了spring事务的内部管理机制。

<bean id="fooService" class="x.y.service.DefaultFooService"/>

<!-- 构建transaction Advisor-->

<tx:advice id="txAdvice" transaction-manager="txManager">

    <tx:attributes>

        <tx:method name="get*" read-only="true"/>

        <tx:method name="*"/>

    </tx:attributes>

</tx>

<aop:config>

        <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>

        <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>

</aop:config>

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource"/>

</bean>

上面的配置将被用来创建一个事务代理,围绕从fooService bean定义创建的对象。代理将被配置为事务通知,以便在代理上调用适当的方法时,事务被启动、挂起、标记为只读,等等,这取决于与该方法相关联的事务配置。

上一篇下一篇

猜你喜欢

热点阅读