在上述项目的基础上,增加事务管理(声明式事务)
第一种:基于xml,在applicationContext.xml中添加下列配置
<beans>
......
<!-- 配置事务管理器 -->
<bean id="transactionManager111" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sf"></property>
</bean>
<!-- xml方式配置事务 -->
<!-- 第一步:定义一个匹配指定方法的切入点 -->
<aop:config>
<aop:pointcut id="studentServiceImpl" expression="execution(* com.service.impl.ProductServiceImpl.*(..))" />
<aop:advisor pointcut-ref="studentServiceImpl" advice-ref="txAdvice" />
</aop:config>
<!-- 第二步:引用事务型的建议 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager111">
<tx:attributes>
<tx:method name="list" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
</beans>
第二种:基于注解
在applicationContext.xml中
<!-- 配置事务管理器 -->
<bean id="transactionManager111" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sf"></property>
</bean>
<!-- 注解方式配置事务 -->
<tx:annotation-driven transaction-manager="transactionManager111"/>
在ProductServiceImpl.java中
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, readOnly=false)
@Override
public List<Product> list() {
List<Product> products= productDao.list();
if(products.isEmpty()){
for (int i = 0; i < 5; i++) {
//if(i==2) throw new RuntimeException();测试事务,要么都插入成功,要么都不插入
Product p = new Product();
p.setName("product " + i);
productDao.add(p);
products.add(p);
}
}
return products;
}
详解见:http://how2j.cn/k/ssh/ssh-transaction-annotation/1077.html