Spring JDBC-使用注解配置声明式事务

本文介绍了Spring如何使用@Transactional注解进行声明式事务管理,包括注解的位置、属性、默认值以及如何在类和方法上使用。同时讨论了在不同事务管理器之间切换的配置方式。
摘要由CSDN通过智能技术生成
  • txannotation-driven其他属性​​
  • ​​关于Transaction的属性​​
  • ​​在何处标注Transactional注解​​
  • ​​使用不同的事务管理器​​

系列

​​Spring对事务管理的支持概述以及 编程式的事务管理​​

​​Spring JDBC-使用XML配置声明式事务​​

​​Spring JDBC-使用注解配置声明式事务​​

概述

除了基于XML的事务配置,Spring还提供了基于注解的事务配置,即通过@Transactional对需要事务增强的Bean接口、实现类或者方法进行标注: 在容器中配置基于注解的事务增强驱动,即可以启用基于注解的声明式事务 。

使用@Transactional注解

我们来对​​Spring JDBC-使用XML配置声明式事务​​中的例子使用@Transactional对基于aop/tx命名空间的事务配置进行改造,我们来感受下二者在使用方式上的差异。

@Service
@Transactional // 对业务类进行事务增强的标注
public class TeacherService {

    private TeacherDao teacherDao;

    public void addTeacher(Teacher teacher) {
        teacherDao.addTeacher(teacher);
    }

    public void updateTeacher(Teacher teacher) {
        teacherDao.updateTeacher(teacher);
    }

    public void getTeacherById(int teacherId) {
        teacherDao.getTeacher(teacherId);
    }

    public void addStudentForTeacher(Teacher teacher, Student student) {
        teacher.setStudent(student);
        teacherDao.addStudent(student);
    }
}

因为注解本身具有一组普适性的默认事务属性,所以 往往只需要在需要事务管理的业务类中添加一个@Transactional注解,就完成了业务类事务属性的配置.

当然,注解只是提供元数据,它本身并不能完成事务切面织入的功能,因此,还需要 在Spring中配置文件中通过一行小小的配置“通知”Spring容器对标注@Transactional注解的Bean进行加工处理 ,如下

<!--基于数据源的事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
      p:dataSource-ref="dataSource"/>

<!--对标注了@Transactional注解Bean进行加工处理,以织入事务管理切面-->     
<tx:annotation-driven transaction-manager="transactionManager"/>

在默认情况下,​ ​<tx:annotation-driven>​​会自动使用名为transactionManager事务管理器, 所以,如果我们的事务管理器的id为transactionManager,如上所示,则可以进一步简化为

<tx:annotation-driven/>

​ ​<tx:annotation-driven>​​其他属性

  • proxy-target-class: 如果为true ,Spring将通过创建子类来代理业务类,若果为false,则使用基于接口的代理。 如果使用子类代理,,需要在类路径中添加CGlib.jar类库
  • order:如果业务类除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值