|
|
(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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd"><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="org.hsqldb.jdbcDriver" /><property name="url" value="jdbc:hsqldb:hsql://localhost" /><property name="username" value="sa" /><property name="password" value="" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mappingResources"><list><value>domain/Contestant.hbm.xml</value><value>domain/Event.hbm.xml</value><value>domain/Location.hbm.xml</value><value>domain/User.hbm.xml</value><value>domain/Voter.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="parentService"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"abstract="true"><property name="transactionManager" ref="transactionManager" /><property name="transactionAttributes"><props><prop key="add*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="persist*">PROPAGATION_REQUIRED</prop><prop key="delete*">PROPAGATION_REQUIRED</prop><prop key="*">PROPAGATION_SUPPORTS,readOnly</prop></props></property></bean><bean id="userDao" class="dao.UserDaoImpl"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="userServiceTarget" class="service.UserServiceImpl"><property name="userDao" ref="userDao" /></bean><bean id="userService" parent="parentService"><property name="target" ref="userServiceTarget" /><property name="proxyInterfaces" value="service.UserService" /></bean></beans> (2)通过aop:config
<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd"><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="org.hsqldb.jdbcDriver" /><property name="url" value="jdbc:hsqldb:hsql://localhost" /><property name="username" value="sa" /><property name="password" value="" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mappingResources"><list><value>domain/Contestant.hbm.xml</value><value>domain/Event.hbm.xml</value><value>domain/Location.hbm.xml</value><value>domain/User.hbm.xml</value><value>domain/Voter.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><tx:advice id="txAdvice"><tx:attributes><tx:method name="add*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="persist*" propagation="REQUIRED" /><tx:method name="*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice><aop:config><aop:advisor pointcut="execution(* *..UserService.*(..))" advice-ref="txAdvice" /></aop:config><bean id="userDao" class="dao.UserDaoImpl"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="userService" class="service.UserServiceImpl"><property name="userDao" ref="userDao" /></bean></beans> (3)通过注解
<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd"><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="org.hsqldb.jdbcDriver" /><property name="url" value="jdbc:hsqldb:hsql://localhost" /><property name="username" value="sa" /><property name="password" value="" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mappingResources"><list><value>domain/Contestant.hbm.xml</value><value>domain/Event.hbm.xml</value><value>domain/Location.hbm.xml</value><value>domain/User.hbm.xml</value><value>domain/Voter.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.jdbc.batch_size">0</prop></props></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><tx:annotation-driven /><bean id="userDao" class="dao.UserDaoImpl"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="userService" class="service.UserServiceImpl"><property name="userDao" ref="userDao" /></bean></beans> package service;import java.util.List;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import dao.UserDao;import domain.User;public class UserServiceImpl implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Transactional(propagation=Propagation.REQUIRED, readOnly=true)public User findById(Long id) {return userDao.findById(id);}@Transactional(propagation=Propagation.REQUIRED, readOnly=true)public User findByEmail(String email) {return userDao.findByEmail(email);}@Transactional(propagation=Propagation.REQUIRED, readOnly=false)public void persist(User user) {userDao.persist(user);}@Transactional(propagation=Propagation.REQUIRED, readOnly=true)public List<User> list() {return userDao.list();}} |
|