一、Spring注解和非注解实现事务处理功能
例1:使用注解实现事务处理
在Spring配置文件中配置事务管理类,并添加对注解配置的事务的支持
<!-- 当容器开启时打开注解 -->
<context:component-scan base-package="com.yh.ssh.dao,com.yh.ssh.biz,com.yh.ssh.action">
</context:component-scan>
<!-- sessionFactory注入事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3 .HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 注释驱动 -->
<tx:annotation-driven transaction-manager="txManager" />
使用@Transactional为方法添加事务支持
@Transactional(propagation=Propagation.REQUIRED)
public void addBathUser(List<Users> us) {
// TODO Auto-generated method stub
for (Users users : us) {
userDao.saveUser(users);
}
}
a. }propagation 枚举型:Propagation
可选的传播性设置。使用举例:@Transactional(propagation=Propagation.REQUIRES_NEW)
b. isolation 枚举型:Isolation
可选的隔离性级别。使用举例:@Transactional(isolation=Isolation.READ_COMMITTED)
c. readOnly 布尔型
是否为只读型事务。使用举例:@Transactional(readOnly=true)
d. timeout int型(以秒为单位)
事务超时。使用举例:Transactional(timeout=10)
e. rollbackFor 一组 Class 类的实例,必须是Throwable的子类
一组异常类,遇到时 必须 回滚。使用举例:@Transactional(rollbackFor={SQLException.class}),多个异常用逗号隔开
f. rollbackForClassName 一组 Class 类的名字,必须是Throwable的子类
一组异常类名,遇到时 必须 回滚。使用举例:@Transactional(rollbackForClassName={"SQLException"}),多个异常用逗号隔开
g. noRollbackFor 一组 Class 类的实例,必须是Throwable的子类
一组异常类,遇到时 必须不 回滚
h. noRollbackForClassName 一组 Class 类的名字,必须是Throwable的子类
一组异常类名,遇到时 必须不 回滚
例2:使用非注解实现事务处理
业务类
public void addBathUser(List<Users> us) {
// TODO Auto-generated method stub
for (Users users : us) {
userDao.saveUser(users);
}
}
Spring容器配置信息,编制事物规则,利用该规则编写切面,而后织入
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sf"></property>
</bean>
<!-- 事务规则 -->
<tx:advice id="txadvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="find*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- 织入 -->
<aop:config>
<aop:pointcut expression="execution(* com.yh.ssh.biz.*.*(..))" id="pc" />
<aop:advisor advice-ref="txadvice" pointcut-ref="pc" />
</aop:config>