spring事务管理(二)
[size=medium]二. 利用继承简化配置
大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类都是TransactionProxyFactoryBean,事务代理bean都必须注入事务管理器。
对于这种情况,Spring提供了bean与bean之间的继承,可以简化配置。将大部分的通用配置,配置成事务模板,而实际的事务代理bean,则继承事务模板。这种配置方式可以减少部分配置代码,下面是采用继承的配置文件:[/size]
[code="java"]
<?xml version="1.0" encoding="gb2312"?>
<!--?? Spring配置文件的文件头,包含DTD等信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
???? "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
??? <!--定义数据源-->
??? <bean id="dataSource" abstract="true">
<!--?? 为事务模板注入事务管理器-->
<property name="transactionManager"><ref bean="transactionManager"/></property>
<!--?? 设置事务属性-->
??????? <property name="transactionAttributes">
<props>
???????? <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
???????? <prop key="*">PROPAGATION_REQUIRED</prop>
??? </props>
</property>
</bean>
<!--?? 实际的事务代理bean-->
??? <bean id="personDao" parent="txBase">
<!--?? 采用嵌套bean配置目标bean -->
<property name="target">
??? <bean class="lee.PersonDaoHibernate">
??????? <property name="sessionFactory"><ref local="sessionFactory"/></property>
???? </bean>
</property>
????? </bean>
</beans>
[/code]
[size=medium]这种配置方式,相比前面直接采用TransactionProxyFactoryBean的事务代理配置方式,可以大大减少配置文件的代码量。每个事务代理的配置都继承事务模板,无需重复指定事务代理的实现类,无需重复指定事务传播属性——当然,如果新的事务代理有额外的事务属性,也可指定自己的事务属性,此时,子bean的属性覆盖父bean的属性。当然每个事务代理bean都必须配置自己的目标bean,这不可避免。
上面的配置可看出,事务代理的配置依然是增量式的,每个事务代理都需要单独配置——虽然增量已经减少,但每个事务代理都需要单独配置。 [/size]
?
[url=http://wisekingokok.iteye.com/admin/blogs/455356]继续阅读spring事务管理(三)[/url]