`

spring 中的事务小结

阅读更多
  spring中可以使用声明式事务和编程式事务,主要用的比较多的是声明式事务,下面举例子小结一下
   首先在config.xml中定义好datasource和platformtranscationmanager
<!-- 定义DataSource -->

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

..........
            </bean>

    <!-- 定义TransactionManager -->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 定义BookDao -->

    <bean id="bookDaoTarget" class="example.chapter6.BookDaoImpl">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 封装为事务的BookDao -->

    <bean id="bookDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="target" ref="bookDaoTarget" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <!-- 对以query开头的方法要求只读事务 -->
                <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
                <!-- 对于其他方法要求事务 -->
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>

则使用的代码例子为
ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
        BookDao bookDao = (BookDao)context.getBean("bookDao");
.....//之后的就是
try
{

}catch {}结构,程序中不需要再有处理事务方面的代码了。

    另外,在JAVA 5中,可以用注释来更简单的配置,但要注意的是,必须使用spring 2.0才行
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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/tx
       http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
>
  。。。。。。其他的和上面的相同,最后加上
<!-- 将所有具有@Transactional注解的Bean自动配置为声明式事务支持 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

然后,对接口使用注释
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface BookDao {

    @Transactional(readOnly=true)
    Book query(String id);

    @Transactional(readOnly=true)
    List<Book> queryAll();

    void insert(Book book);

    void update(Book book);

    void delete(Book book);

}
要注意的是,@transcational的注释只能应用到public方法上

2 集成hiberante事务
   比如用hibernatedaosupport支持DAO,使用spring 2.0的注解,比如

bookdao.java
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface BookDao {

    @Transactional(readOnly=true)
    Book query(String id);

    @Transactional(readOnly=true)
    List<Book> queryAll();

    void insert(Book book);

    void update(Book book);

    void delete(Book book);

}

实体配置代码如下

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity(name="Book")
public class Book {

    private String id;
    private String name;
    private String author;

    @Id
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getAuthor() { return author; }
    public void setAuthor(String author) { this.author = author; }

}
然后其配置代码如下
<!-- 定义SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="annotatedClasses">
            <list>
                <value>example.chapter6.Book</value>
            </list>
        </property>
        <property name="annotatedPackages">
            <list>
                <value>example.chapter6</value>
            </list>
        </property>
     </bean>

     <!-- 定义TransactionManager -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!-- 定义BookDao -->
    <bean id="bookDao" class="example.chapter6.BookDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <!-- 将所有具有@Transactional注解的Bean自动配置为声明式事务支持 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

分享到:
评论
1 楼 ynial 2008-09-29  
对接口使用注释 好吗?

相关推荐

    在Spring中使用JTA事务管理

    在Spring中使用JTA事务管理 1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置...3 小结

    Spring 个人小结

    spring 个人小结 ,工厂模式 源码解析 ,AOP ,IOC 隔离事务

    关于spring声明式事务管理异常处理的测试和小结

    spring声明式事务管理异常处理的测试

    Spring攻略PDF版

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.6.2.1. 文档视图定义 14.6.2.2. Controller 代码 14.6.2.3. Excel视图子类 14.6.2.4. PDF视图子类 14.7. JasperReports 14.7.1. 依赖...

    Spring中文帮助文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring攻略(第二版 中文高清版).part1

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring攻略中文版PDF

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring ...

    Spring攻略(第二版 中文高清版).part2

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring攻略英文版(附带源码)

     第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持  第三部分 高级主题  第13章 Spring Security...

    spring in action英文版

     5.2 在Spring中编写事务  5.3 声明式事务  5.3.1 理解事务属性  5.3.2 声明一个简单的事务策略  5.4 通过方法名声明事务  5.4.1 使用NameMatchTransactionAttributeSource  5.4.2 名称匹配事务...

    Spring.3.x企业应用开发实战(完整版).part2

    1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...

    Spring in Action(第二版 中文高清版).part2

    6.3 在Spring中编写事务 6.4 声明式事务 6.4.1 定义事务参数 6.4.2 代理事务 6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份...

    Spring in Action(第二版 中文高清版).part1

    6.3 在Spring中编写事务 6.4 声明式事务 6.4.1 定义事务参数 6.4.2 代理事务 6.4.3 在Spring 2.0里声明事务 6.4.4 定义注释驱动事务 6.5 小结 第7章 保护Spring 7.1 Spring Security介绍 7.2 验证用户身份...

    spring.doc

    小结: 47 面向接口编程: 47 4 面向切面编程 52 4.1 代理模式 52 代理模式拓展: 52 4.1.1 JDK动态代理 58 JDK动态代理拓展: 59 4.1.2 CGLIB做代理 66 CGLIB动态代理拓展: 68 4.1.3 Spring的动态代理 71 4.2 AOP...

    Spring 2.0 开发参考手册

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring in Action(第2版)中文版

    6.3在spring中编写事务 6.4声明式事务 6.4.1定义事务参数 6.4.2代理事务 6.4.3在spring2.0里声明事务 6.4.4定义注释驱动事务 6.5小结 第7章保护spring 7.1springsecurity介绍 7.2验证用户身份 7.2.1配置...

    Spring3.x企业应用开发实战(完整版) part1

    1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...

    spring chm文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring API

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

Global site tag (gtag.js) - Google Analytics