spring中事务配置的3种方式

来源:互联网 发布:即时通讯软件 开源 编辑:程序博客网 时间:2024/05/22 16:38

 http://xuxiaolei.iteye.com/blog/417803

(1)通过TransactionProxyFactoryBean来声明

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  8.     http://www.springframework.org/schema/aop   
  9.     http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
  10.     http://www.springframework.org/schema/tx   
  11.     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
  12.   
  13.     <bean id="dataSource"  
  14.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  15.         <property name="driverClassName" value="org.hsqldb.jdbcDriver" />  
  16.         <property name="url" value="jdbc:hsqldb:hsql://localhost" />  
  17.         <property name="username" value="sa" />  
  18.         <property name="password" value="" />  
  19.     </bean>  
  20.   
  21.     <bean id="sessionFactory"  
  22.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  23.         <property name="dataSource" ref="dataSource" />  
  24.         <property name="mappingResources">  
  25.             <list>  
  26.                 <value>domain/Contestant.hbm.xml</value>  
  27.                 <value>domain/Event.hbm.xml</value>  
  28.                 <value>domain/Location.hbm.xml</value>  
  29.                 <value>domain/User.hbm.xml</value>  
  30.                 <value>domain/Voter.hbm.xml</value>  
  31.             </list>  
  32.         </property>  
  33.         <property name="hibernateProperties">  
  34.             <props>  
  35.                 <prop key="hibernate.dialect">  
  36.                     org.hibernate.dialect.HSQLDialect   
  37.                 </prop>  
  38.                 <prop key="hibernate.show_sql">true</prop>  
  39.             </props>  
  40.         </property>  
  41.     </bean>  
  42.   
  43.     <bean id="transactionManager"  
  44.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  45.         <property name="sessionFactory" ref="sessionFactory" />  
  46.     </bean>  
  47.   
  48.     <bean id="parentService"  
  49.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
  50.         abstract="true">  
  51.         <property name="transactionManager" ref="transactionManager" />  
  52.         <property name="transactionAttributes">  
  53.             <props>  
  54.                 <prop key="add*">PROPAGATION_REQUIRED</prop>  
  55.                 <prop key="update*">PROPAGATION_REQUIRED</prop>  
  56.                 <prop key="persist*">PROPAGATION_REQUIRED</prop>  
  57.                 <prop key="delete*">PROPAGATION_REQUIRED</prop>  
  58.                 <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>  
  59.             </props>  
  60.         </property>  
  61.     </bean>  
  62.   
  63.     <bean id="userDao" class="dao.UserDaoImpl">  
  64.         <property name="sessionFactory" ref="sessionFactory" />  
  65.     </bean>  
  66.   
  67.     <bean id="userServiceTarget" class="service.UserServiceImpl">  
  68.         <property name="userDao" ref="userDao" />  
  69.     </bean>  
  70.   
  71.     <bean id="userService" parent="parentService">  
  72.         <property name="target" ref="userServiceTarget" />  
  73.         <property name="proxyInterfaces" value="service.UserService" />  
  74.     </bean>  
  75.   
  76. </beans>  

 (2)通过aop:config

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  8.     http://www.springframework.org/schema/aop   
  9.     http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
  10.     http://www.springframework.org/schema/tx   
  11.     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
  12.   
  13.     <bean id="dataSource"  
  14.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  15.         <property name="driverClassName" value="org.hsqldb.jdbcDriver" />  
  16.         <property name="url" value="jdbc:hsqldb:hsql://localhost" />  
  17.         <property name="username" value="sa" />  
  18.         <property name="password" value="" />  
  19.     </bean>  
  20.   
  21.     <bean id="sessionFactory"  
  22.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  23.         <property name="dataSource" ref="dataSource" />  
  24.         <property name="mappingResources">  
  25.             <list>  
  26.                 <value>domain/Contestant.hbm.xml</value>  
  27.                 <value>domain/Event.hbm.xml</value>  
  28.                 <value>domain/Location.hbm.xml</value>  
  29.                 <value>domain/User.hbm.xml</value>  
  30.                 <value>domain/Voter.hbm.xml</value>  
  31.             </list>  
  32.         </property>  
  33.         <property name="hibernateProperties">  
  34.             <props>  
  35.                 <prop key="hibernate.dialect">  
  36.                     org.hibernate.dialect.HSQLDialect   
  37.                 </prop>  
  38.                 <prop key="hibernate.show_sql">true</prop>  
  39.             </props>  
  40.         </property>  
  41.     </bean>  
  42.   
  43.     <bean id="transactionManager"  
  44.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  45.         <property name="sessionFactory" ref="sessionFactory" />  
  46.     </bean>  
  47.        
  48.     <tx:advice id="txAdvice">  
  49.         <tx:attributes>  
  50.             <tx:method name="add*" propagation="REQUIRED" />  
  51.             <tx:method name="update*" propagation="REQUIRED" />  
  52.             <tx:method name="delete*" propagation="REQUIRED" />  
  53.             <tx:method name="persist*" propagation="REQUIRED" />  
  54.             <tx:method name="*" propagation="SUPPORTS" read-only="true"/>  
  55.         </tx:attributes>  
  56.     </tx:advice>  
  57.        
  58.     <aop:config>  
  59.         <aop:advisor pointcut="execution(* *..UserService.*(..))" advice-ref="txAdvice" />  
  60.     </aop:config>  
  61.   
  62.     <bean id="userDao" class="dao.UserDaoImpl">  
  63.         <property name="sessionFactory" ref="sessionFactory" />  
  64.     </bean>  
  65.   
  66.     <bean id="userService" class="service.UserServiceImpl">  
  67.         <property name="userDao" ref="userDao" />  
  68.     </bean>  
  69. </beans>  

 (3)通过注解

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  8.     http://www.springframework.org/schema/aop   
  9.     http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
  10.     http://www.springframework.org/schema/tx   
  11.     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
  12.   
  13.     <bean id="dataSource"  
  14.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  15.         <property name="driverClassName" value="org.hsqldb.jdbcDriver" />  
  16.         <property name="url" value="jdbc:hsqldb:hsql://localhost" />  
  17.         <property name="username" value="sa" />  
  18.         <property name="password" value="" />  
  19.     </bean>  
  20.   
  21.     <bean id="sessionFactory"  
  22.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  23.         <property name="dataSource" ref="dataSource" />  
  24.         <property name="mappingResources">  
  25.             <list>  
  26.                 <value>domain/Contestant.hbm.xml</value>  
  27.                 <value>domain/Event.hbm.xml</value>  
  28.                 <value>domain/Location.hbm.xml</value>  
  29.                 <value>domain/User.hbm.xml</value>  
  30.                 <value>domain/Voter.hbm.xml</value>  
  31.             </list>  
  32.         </property>  
  33.         <property name="hibernateProperties">  
  34.             <props>  
  35.                 <prop key="hibernate.dialect">  
  36.                     org.hibernate.dialect.HSQLDialect   
  37.                 </prop>  
  38.                 <prop key="hibernate.show_sql">true</prop>  
  39.                 <prop key="hibernate.jdbc.batch_size">0</prop>  
  40.             </props>  
  41.         </property>  
  42.     </bean>  
  43.   
  44.     <bean id="transactionManager"  
  45.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  46.         <property name="sessionFactory" ref="sessionFactory" />  
  47.     </bean>  
  48.        
  49.     <tx:annotation-driven />  
  50.        
  51.     <bean id="userDao" class="dao.UserDaoImpl">  
  52.         <property name="sessionFactory" ref="sessionFactory" />  
  53.     </bean>  
  54.   
  55.     <bean id="userService" class="service.UserServiceImpl">  
  56.         <property name="userDao" ref="userDao" />  
  57.     </bean>  
  58. </beans>  

 

Java代码 复制代码 收藏代码
  1. package service;   
  2.   
  3. import java.util.List;   
  4.   
  5. import org.springframework.transaction.annotation.Propagation;   
  6. import org.springframework.transaction.annotation.Transactional;   
  7.   
  8. import dao.UserDao;   
  9. import domain.User;   
  10.   
  11. public class UserServiceImpl implements UserService {   
  12.        
  13.     private UserDao userDao;   
  14.   
  15.     public void setUserDao(UserDao userDao) {   
  16.         this.userDao = userDao;   
  17.     }   
  18.   
  19.     @Transactional(propagation=Propagation.REQUIRED, readOnly=true)   
  20.     public User findById(Long id) {   
  21.         return userDao.findById(id);   
  22.     }   
  23.        
  24.     @Transactional(propagation=Propagation.REQUIRED, readOnly=true)   
  25.     public User findByEmail(String email) {   
  26.         return userDao.findByEmail(email);   
  27.     }   
  28.   
  29.     @Transactional(propagation=Propagation.REQUIRED, readOnly=false)   
  30.     public void persist(User user) {   
  31.         userDao.persist(user);   
  32.     }   
  33.   
  34.     @Transactional(propagation=Propagation.REQUIRED, readOnly=true)   
  35.     public List<User> list() {   
  36.         return userDao.list();   
  37.     }   
  38. }