java之事务管理_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java之事务管理

java之事务管理

 2013/9/8 12:36:59  gdfdfg  程序员俱乐部  我要评论(0)
  • 摘要:Spring事务管理---声明式(1)利用TransactionProxyFactoryBean生成事务管理通常建议采用声明式事务管理优势:代码中无需关注事务逻辑,让spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。声明式事务管理的配置方式,通常有如下三种:1、使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式2
  • 标签:Java

class="MsoNormal">Spring事务管理---声明式(1)利用

?

TransactionProxyFactoryBean生成事务管理

?

通常建议采用声明式事务管理

优势:代码中无需关注事务逻辑,让spring声明式事务管理负责事务逻辑,声明式事务管理无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换。

?

声明式事务管理的配置方式,通常有如下三种:

1、? 使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。此方式是最传统,配置文件最臃肿、难以阅读的方式

2、? 采用bean继承的事务代理配置方式,比较简洁,但依然是增量式配置

3、? 使用beanNameAutoProxyCreator,根据bean name自动生成事务代理的方式,这个是直接利用springaop框架配置事务代理的方式,需要对springaop框架有所理解,但是这种方式避免了增量式配置,效果非常不错

4、? DefaultAdvisorAutoProxyCreator:这个也是直接利用springaop框架配置事务代理的方式,效果也非常不错,只是这种方式的可读性不如第三种方式

?

1、利用TransactionProxyFactoryBean生成事务代理

?

采用这种配置的时候,配置文件增长的非常快,每个bean有需要两个bean配置,一个目标,另外还需要使用TransactionProxyFactoryBean配置一个代理bean。这是一种最原始的配置方式,下面是使用TransactionProxyFactoryBean的配置文件

?

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

?

??? <!-- JDBC Properties -->

??? <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

?????? <property name="locations">

?????????? <list>

????????????? <value>classpath*:jdbc.properties</value>

?????????? </list>

?????? </property>

??? </bean>

?

??? <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

?????? <property name="driverClassName" value="${jdbc.driverClassName}" />

?????? <property name="url" value="${jdbc.url}" />

?????? <property name="username" value="${jdbc.username}" />

?????? <property name="password" value="${jdbc.password}" />

?????? <!--

?????????? <property name="initialSize" value="10" />

?????????? <property name="maxActive" value="50" />

?????? -->

??? </bean>

?

??? <!-- Use JNDI dataSource -->

??? <!--

?????? <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

?????? <property name="jndiName" value="java:comp/env/jdbc/neo"/>

?????? </bean>

???

??? <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

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

??? </bean>

??? -->

???

???

??? <bean id="jdbcTemplate" class="ssf.teachSys.service.TeachSysJdbcTemplate">

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

??? </bean>

?

???

??? <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">

?????? <constructor-arg ref="dataSource" />

??? </bean>

?

??? <bean id="callableStatementTemplate" class="ssf.core.common.CallableStatementTemplate">

?????? <property name="jdbcTemplate" ref="jdbcTemplate" />

??? </bean>

?

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

?????? <property name="dataSource">

?????????? <ref bean="dataSource" />

?????? </property>

??? </bean>

?

??? <bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

?????? abstract="true">

?????? <property name="transactionManager" ref="transactionManager" />

?????? <property name="proxyTargetClass" value="true" />

?????? <property name="transactionAttributes">

?????????? <props>

????????????? <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

????????????? <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>

????????????? <prop key="save*">PROPAGATION_REQUIRED</prop>

????????????? <prop key="delete*">PROPAGATION_REQUIRED</prop>

????????????? <prop key="fetch*">PROPAGATION_REQUIRED</prop>

????????????? <prop key="rank*">PROPAGATION_REQUIRED</prop>

?????????? </props>

?????? </property>

??? </bean>

</beans>

?

2、利用继承简化配置

?

大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类都是TransactionProxyFactoryBean,事务代理bean都必须注入事务管理器

?

对于这种情况,spring 提供了beanbean 之间的继承,可以简化配。将大部分的通用配置,配置成事务模板,而实际事务代理bean,则继承事务模板,这种配置方式可以减少部分配置代码,下面是采用继承的配置文件:

?

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans default-autowire="byName" default-merge="true">

???

??? <bean id="functionService" parent="baseTxService">

?????? <property name="target">

?????????? <bean class="ssf.teachSys.service.FunctionService" />

?????? </property>

??? </bean>

</beans>

发表评论
用户名: 匿名