spring四种声明式事务配置
1、TransactionProxyFactoryBean<?xml?version="1.0"?encoding="UTF-8"?>
<beans?xmlns="http://www.springframework.org/schema/beans"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"
????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
????<bean?id="sessionFactory"
????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
????????<property?name="configLocation"?value="classpath:hibernate.cfg.xml">
????????</property>
????</bean>
????<bean?id="TblUserDAO"?class="com.angi.dao.TblUserDAO">
????????<property?name="sessionFactory">
????????????<ref?bean="sessionFactory"?/>
????????</property>
????</bean>
????<!--?声明一个?Hibernate?3?的?事务管理器供代理类自动管理事务用?-->
????<bean?id="transactionManager"
????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">
????????<property?name="sessionFactory">
????????????<ref?local="sessionFactory"?/>
????????</property>
????</bean>
????<bean?id="TblUserDAOProxy"
????????class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
????????<!--
????????????注意这个属性,?详细意义请参考Spring文档中的CGLIB部分或者本章的?10.7.2参考资料部分,?必须为?true
????????????使用CGLIB才不用强制编写DAO接口
????????-->
????????<property?name="proxyTargetClass">
????????????<value>true</value>
????????</property>
????????<property?name="transactionManager">
????????????<ref?bean="transactionManager"?/>
????????</property>
????????<property?name="target">
????????????<ref?local="TblUserDAO"?/>
????????</property>
????????<property?name="transactionAttributes">
????????????<props>
????????????????<!--?这里的方法签名可以精确到方法,?先懒惰一下全配置上?-->
????????????????<prop?key="*">PROPAGATION_REQUIRED</prop>
????????????</props>
????????</property>
????</bean>
</beans>2、TransactionInterceptor<?xml?version="1.0"?encoding="UTF-8"?>
<beans?xmlns="http://www.springframework.org/schema/beans"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"
????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
????<bean?id="sessionFactory"
????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
????????<property?name="configLocation"?value="classpath:hibernate.cfg.xml">
????????</property>
????</bean>
????<bean?id="tblUserDAO"?class="com.angi.dao.TblUserDAO">
????????<property?name="sessionFactory">
????????????<ref?bean="sessionFactory"?/>
????????</property>
????</bean>
????<bean?id="tblUserService"?class="com.angi.dao.service.TblUserService">
????????<property?name="tblUserDAO">
????????????<ref?bean="tblUserDAO"?/>
????????</property>
????</bean>
????<!--?声明一个?Hibernate?3?的?事务管理器供代理类自动管理事务用?-->
????<bean?id="transactionManager"
????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">
????????<property?name="sessionFactory">
????????????<ref?local="sessionFactory"?/>
????????</property>
????</bean>
????<bean
????????class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
????????<property?name="beanNames">
????????????<list>
????????????????<value>tblUserService</value>
????????????</list>
????????</property>
????????<property?name="interceptorNames">
????????????<list>
????????????????<value>transactionInterceptor</value>
????????????</list>
????????</property>
????</bean>
????<bean?id="transactionInterceptor"
????????class="org.springframework.transaction.interceptor.TransactionInterceptor">
????????<property?name="transactionManager"?ref="transactionManager"?/>
????????<property?name="transactionAttributes">
????????????<props>
????????????????<!--?这里的方法签名可以精确到方法,?先懒惰一下全配置上?-->
????????????????<prop?key="*">PROPAGATION_REQUIRED</prop>
????????????</props>
????????</property>
????</bean>
</beans>3、AOP和TX配置<?xml?version="1.0"?encoding="UTF-8"?>
<beans?xmlns="http://www.springframework.org/schema/beans"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"
????xmlns:aop="http://www.springframework.org/schema/aop"?xmlns:tx="http://www.springframework.org/schema/tx"
????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-3.0.xsd?http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-3.0.xsd?http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-3.0.xsd?">
????<bean?id="sessionFactory"
????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
????????<property?name="configLocation"?value="classpath:hibernate.cfg.xml">
????????</property>
????</bean>
????<bean?id="tblUserDAO"?class="com.angi.dao.TblUserDAO">
????????<property?name="sessionFactory">
????????????<ref?bean="sessionFactory"?/>
????????</property>
????</bean>
????<bean?id="tblUserService"?class="com.angi.dao.service.TblUserService">
????????<property?name="tblUserDAO">
????????????<ref?bean="tblUserDAO"?/>
????????</property>
????</bean>
????<!--?声明一个?Hibernate?3?的?事务管理器供代理类自动管理事务用?-->
????<bean?id="transactionManager"
????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">
????????<property?name="sessionFactory">
????????????<ref?local="sessionFactory"?/>
????????</property>
????</bean>
????<!--?需要引入aop的命名空间?-->
????<aop:config>
????????<!--?切入点指明了在执行Service的所有方法时产生事务拦截操作?-->
????????<aop:pointcut?id="daoMethods"
????????????expression="execution(*?com.angi.dao.service.TblUserService.*(..))"?/>
????????<!--?定义了将采用何种拦截操作,这里引用到?txAdvice?-->
????????<aop:advisor?advice-ref="txAdvice"?pointcut-ref="daoMethods"?/>
????</aop:config>
????<!--?需要引入tx的命名空间?-->
????<!--?这是事务通知操作,使用的事务管理器引用自?transactionManager?-->
????<tx:advice?id="txAdvice"?transaction-manager="transactionManager">
????????<tx:attributes>
????????????<!--?指定哪些方法需要加入事务,这里懒惰一下全部加入,可以使用通配符来只加入需要的方法?-->
????????????<tx:method?name="*"?propagation="REQUIRED"?/>
????????</tx:attributes>
????</tx:advice>
</beans>4、anotation<?xml?version="1.0"?encoding="UTF-8"?>
<beans?xmlns="http://www.springframework.org/schema/beans"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"
????xmlns:tx="http://www.springframework.org/schema/tx"
????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-3.0.xsd?http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-3.0.xsd?http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-3.0.xsd?">
????<!--?需要引入tx的命名空间?-->
????<tx:annotation-driven?transaction-manager="transactionManager"?/>
????<bean?id="sessionFactory"
????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
????????<property?name="configLocation"?value="classpath:hibernate.cfg.xml">
????????</property>
????</bean>
????<bean?id="tblUserDAO"?class="com.angi.dao.TblUserDAO">
????????<property?name="sessionFactory">
????????????<ref?bean="sessionFactory"?/>
????????</property>
????</bean>
????<bean?id="tblUserService"?class="com.angi.dao.service.TblUserService">
????????<property?name="tblUserDAO">
????????????<ref?bean="tblUserDAO"?/>
????????</property>
????</bean>
????<!--?声明一个?Hibernate3?的事务管理器供代理类自动管理事务用?-->
????<bean?id="transactionManager"
????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">
????????<property?name="sessionFactory">
????????????<ref?local="sessionFactory"?/>
????????</property>
????</bean>
</beans>@Transactional
????public?void?doTransaction()?{
????????//?step1?insert
????????TblUser?tblUser1?=?new?TblUser();
????????tblUser1.setId(24);
????????tblUser1.setUsername("Angi12");
????????tblUser1.setPassword("Wang21");
????????tblUserDAO.save(tblUser1);
????????//?step2?update
????????TblUser?tblUser2?=?tblUserDAO.findById(2);
????????tblUser2.setPassword(tblUser2.getPassword()?+?"a");
????????tblUserDAO.update(tblUser2);
????????//?step3?insert
????????TblUser?tblUser?=?new?TblUser();
????????tblUser.setId(23);
????????tblUser.setUsername("Angi");
????????tblUser.setPassword("Wang");
????????tblUserDAO.save(tblUser);
????}