Spring声明式事务配置的两种策略SpringAop和Bean后处理器的代理BeanNameAutoProxyCreator

Spring的事务配置有两种:1编程式事务管理配置;2声明式事务管理配置。下面介绍两种声明式事务的配置,声明式事务相比于编程式事务代码耦合更低,无序书写任何事务管理的先关代码。两种声明式事务配置策略分别是:SpringAop事务管理和Bean后处理器的代理BeanNameAutoProxyCreator管理事务。

1、SpringAop事务管理配置

1.1、配置数据源:

     <bean id="pycDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${pyc.jdbc.driver}" />
		<property name="jdbcUrl" value="${pyc.jdbc.url}" />
		<property name="user" value="${pyc.jdbc.user}" />
		<property name="password" value="${pyc.jdbc.password}" />

		<property name="checkoutTimeout" value="30000" />
		<property name="idleConnectionTestPeriod" value="30" />
		<property name="maxIdleTime" value="30" />
		<property name="initialPoolSize" value="5" />
		<property name="minPoolSize" value="5" />
		<property name="maxPoolSize" value="20" />
		<property name="acquireIncrement" value="5" />

	</bean>

1.2、配置事务管理器

       <!-- 配置事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

1.3、配置事务增强处理Bean

Spring提供了tx配置事务管理,<tx:advice.../>元素来配置事务增强处理,使用<aop:advisor.../>启用代理。

     <!-- 配置事务增强处理Bean,指定事务管理器 -->
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
	    <!-- 配置详细事务处理语义 -->
		<tx:attributes>
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />

			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />

			<!-- 其他采用默认事务方式 -->
			<tx:method name="*"/>

		</tx:attributes>
	</tx:advice>

1.4、AOP代理

   <!-- Spring aop事务管理 -->
	<aop:config>
	    <!-- 配置切入点 -->
		<aop:pointcut id="transactionPointcut"
			expression="execution(* org.andy.shop.service..*Impl.*(..))" />
		<!-- 指定在txAdvice切入点应用txAdvice事务增强处理 -->
		<aop:advisor pointcut-ref="transactionPointcut"
			advice-ref="transactionAdvice" />
	</aop:config>

2、BeanNameAutoProxyCreator自动创建事务代理

数据源的配置、事务管理器的配置和上面的一样就在此处省略....

2.3、事务拦截器

    <!-- 声明式事务,事务拦截器 -->
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager" ref="transactionManager" />
		<!-- 配置事务属性 -->
		<property name="transactionAttributes">
			<!--下面定义事务传播属性 -->
			<props>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>

2.4、定义BeanNameAutoProxyCreator

BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理,BeanNameAutoProxyCreator是个根据bean名生成自动代理的代理创建器,该bean通常需要接受两个参数。第一个是beanNames属性,该属性用来设置哪些bean需要自动生成代理。另一个属性是interceptorNames,该属性则指定事务拦截器,自动创建事务代理时,系统会根据这些事务拦截器的属性来生成对应的事务代理。

	<!-- Bean后处理器BeanNameAutoProxyCreator,根据List配置创建事务代理 -->
	<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<!-- 下面是所有需要自动创建事务代理的bean -->
		<property name="beanNames">
			<list>
				<value>*ServiceImpl</value>
			</list>
		</property>
		<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 -->
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>

博客来源http://blog.csdn.net/fengshizty

时间: 2024-08-07 00:17:38

Spring声明式事务配置的两种策略SpringAop和Bean后处理器的代理BeanNameAutoProxyCreator的相关文章

spring声明式事务配置详解

spring声明式事务配置详解 君子不器 2013年06月16日 编程世界 5273次阅读 查看评论 理解Spring的声明式事务管理实现 本节的目的是消除与使用声明式事务管理有关的神秘性.简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('<tx:annotation-driven/>')行,然后期望你理解整个过程是怎么工作的.此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于误入迷途,回朔到上游平静

Spring声明式事务配置与使用

1.配置: <context:component-scan base-package="com.vrvwh.wh01" /><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name=&

Spring声明式事务配置中propagation各个值的意思

值 含义 REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务. SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. MANDATORY 支持当前事务,如果当前没有事务,就抛出异常. REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起. NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起. NEVER 以非事务方式执行,如果当前存在事务,则抛出异常. NESTED 支持当前事务,如果当前事务存在,则执行一个嵌套事

Spring声明式事务管理与配置详解

转载:http://www.cnblogs.com/hellojava/archive/2012/11/21/2780694.html 1.Spring声明式事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之前对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionMa

Spring声明式事务管理与配置介绍

转至:http://java.9sssd.com/javafw/art/1215 [摘要]本文介绍Spring声明式事务管理与配置,包括Spring声明式事务配置的五种方式.事务的传播属性(Propagation).Spring事务的隔离级别(Isolation level)等内容. 一.Spring声明式事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把

Spring声明式事务的配置~~~

/*2011年8月28日 10:03:30 by Rush  */ 环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add librarys: 打开Add Libraries对话框,然后选定 MyEclipse Libraries: 点击Next,找到Spring 2.0 aop Libraries并勾选上,点击finsh即可. 如果在项目里面能看到下面的库文件,

spring声明式事务管理

Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务. 声明式事务管理分为两种:1.配置文件   2.注解 1.配置文件(声明式事务管理)用法: 在applicationContext.xml配置文件中配置①事务管理器(事务管理者).②事务参数(事务通知).③AOP配置 如下: applicationContext.xml配置文件代码 1 <!-- 事务管理器(

Spring声明式事务配置管理方法

环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add librarys: 打开Add Libraries对话框,然后选定 MyEclipse Libraries: 点击Next,找到Spring 2.0 aop Libraries并勾选上,点击finsh即可. 如果在项目里面能看到下面的库文件,说明已经安装成功. 事务配置 首先在/WEB-INF/applica

Spring声明式事务配置管理方法(转)

项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add librarys: 打开Add Libraries对话框,然后选定 MyEclipse Libraries: 点击Next,找到Spring 2.0 aop Libraries并勾选上,点击finsh即可. 如果在项目里面能看到下面的库文件,说明已经安装成功. 事务配置 首先在/WEB-INF/applicationC