spring声明式事务不起作用
代码如下:
User类:
manager层
dao层:
测试类:
spring配置文件
为什么spring事务不起作用,记录还会存到数据库。但是,如果UserDaoImpl继承HibernateDaoSupport,采用this.getHibernateTemplate().save(user),spring事务就起作用。小弟是个菜鸟,刚学spring,哪位高手可以解释一下。
代码如下:
User类:
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
manager层
public interface UserMgr {
public void saveUser(User user);
}
public class UserMgrImpl implements UserMgr {
private UserDao userDao;
public void saveUser(User user) {
userDao.saveUser(user);
throw new RuntimeException();
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
dao层:
public interface UserDao {
public void saveUser(User user);
}
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public void saveUser(User user) {
Session session = sessionFactory.openSession();
session.save(user);
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
测试类:
public class UserTest extends TestCase {
public void test1(){
ApplicationContext ctx = (ApplicationContext)new FileSystemXmlApplicationContext("applicationContext-*.xml");
UserMgr mgr = (UserMgr)ctx.getBean("manager");
User user = new User();
user.setUsername("AAA");
user.setPassword("123");
mgr.saveUser(user);
}
}
spring配置文件
<?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/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="userDao" class="dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="manager" class="manager.UserMgrImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* manager.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
</beans>
为什么spring事务不起作用,记录还会存到数据库。但是,如果UserDaoImpl继承HibernateDaoSupport,采用this.getHibernateTemplate().save(user),spring事务就起作用。小弟是个菜鸟,刚学spring,哪位高手可以解释一下。