`
8366
  • 浏览: 809272 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第24讲 --使用Spring配置文件实现事务管理

阅读更多

 

采用基于XML方式配置事务
 
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	<property name="dataSource" ref="dataSource"/>
</bean>
<aop:config>
  	<aop:pointcut id="transactionPointcut" expression="execution(* cn.itcast.service..*.*(..))"/>
  	<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
</aop:config> 
<tx:advice id="txAdvice" transaction-manager="txManager">
	  <tx:attributes>
	    <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
	    <tx:method name="*"/>
	  </tx:attributes>
</tx:advice>
 
例子:我们使用xml配置的方式实现事务控制
 
步骤:1 .先写接口,再写实现,实现中去掉注解
package cn.com.xinli.service.impl;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

import cn.com.xinli.bean.Person;
import cn.com.xinli.service.PersonService;

public class PersonServiceBean implements PersonService
{
	public JdbcTemplate jdbcTemplate;
	public DataSource dataSource;
	
	public DataSource getDataSource()
	{
		return dataSource;
	}

	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	
	public void delete(Integer personid) {
		jdbcTemplate.update("delete from person where id=?", new Object[]{personid},
				new int[]{java.sql.Types.INTEGER});
		
	
	}

	public Person getPerson(Integer personid) {		
		return (Person)jdbcTemplate.queryForObject("select * from person where id=?", new Object[]{personid}, 
				new int[]{java.sql.Types.INTEGER}, new PersonRowMapper());
	}

	@SuppressWarnings("unchecked")
	public List<Person> getPersons() {
		return (List<Person>)jdbcTemplate.query("select * from person", new PersonRowMapper());
	}

	public void save(Person person) {
		jdbcTemplate.update("insert into person(name) values(?)", new Object[]{person.getName()},
				new int[]{java.sql.Types.VARCHAR});
	}

	public void update(Person person) {
		jdbcTemplate.update("update person set name=? where id=?", new Object[]{person.getName(), person.getId()},
				new int[]{java.sql.Types.VARCHAR, java.sql.Types.INTEGER});
	}
}
 
 2.在beans.xml 中配置事务,也就是配置一个aop
 <!-- 配置事务-->
 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	<property name="dataSource" ref="dataSource"/>
  </bean>
  <!-- 配置事务管理器 (基于注解的事务需要此配置,基于xml配置事务应该去掉此配置)
  <tx:annotation-driven transaction-manager="txManager"/>
  -->
   <bean id="personService" class="cn.com.xinli.service.impl.PersonServiceBean">
   	<property name="dataSource" ref="dataSource"></property>
   </bean>
   
   <aop:config>
   <!-- 配置一个切面,和需要拦截的类和方法 -->
  	<aop:pointcut id="transactionPointcut" expression="execution(* cn.com.xinli.service..*.*(..))"/>
  	<!-- 引用一个事务通知 -->
  	<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
</aop:config> 
<!-- 配置一个事务通知 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
	  <tx:attributes>
	    <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
	    <tx:method name="*"/>
	  </tx:attributes>
</tx:advice>
   
 3.在delete 方法中抛出一个 运行期例外 ,如果事务起作用,那么要删除的记录汇回滚。
public void delete(Integer personid) {
		jdbcTemplate.update("delete from person where id=?", new Object[]{personid},
				new int[]{java.sql.Types.INTEGER});
		throw new RuntimeException("我是例外");
		
	
	}
 4.测试
 public void testDelete() throws Exception{
		personService.delete(5);
	}
 5结果
由于配置了事务,在业务方法中有 运行期例外,则事务回滚,并没有删除id 为5的记录,
在bean.xml中去掉事务的配置,在运行测试用例,发现id为5的记录已经被删除,可见xml配置事务起了作用,是要也是利用了aop,在拦截到方法的时候为方法加上事务
分享到:
评论

相关推荐

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

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...

    第24次课-1 Spring与Hibernate的整合

    第24次课-1 Spring与Hibernate的整合 本节主要内容 24.1 概述 24.2 管理SessionFactory 24.3 Spring对Hibernate的简化 24.1 概述 24.1.1 概述 Spring提供了很多IoC特性的支持,方便处理大部分典型的Hibernate整合...

    springlive(共11章)

    2. **第二章:搭建Spring环境** - 安装与配置:介绍如何配置Java开发环境,包括JDK、IDE和构建工具如Maven或Gradle。 - 创建第一个Spring项目:逐步指导创建一个简单的Spring项目,体验Spring的基本配置。 3. **...

    spring2.5学习PPT 传智博客

    - 设置Spring库并创建第一个Spring应用,包括编写XML配置文件。 - 测试配置环境,确保Spring可以正确初始化和管理Bean。 3. **Spring管理Bean的原理** - 解释Bean的实例化过程,包括单例(Singleton)和原型...

    spring4源码1

    8. 第二讲:可能是对Spring框架的初步介绍,包括项目结构、依赖管理和基本概念。 通过这些源码讲解,开发者可以更好地理解Spring的工作原理,学习如何调试和优化Spring应用,同时也能提升阅读和理解开源项目源码的...

    Pro Spring3

    #### 二十四、SpringSource Tool Suite(附录A) - **安装与配置**:指导如何安装和配置 SpringSource Tool Suite。 - **主要特性**:介绍 STS 的主要功能和特性。 - **开发技巧**:分享在使用 STS 进行开发时的...

    跟我学spring3(8-13)

    2. **12.2 注解实现Bean依赖注入**:通过@Component、@Autowired等注解,可以省去XML配置文件,直接在类上声明Bean及其依赖。 3. **12.3 注解实现Bean定义**:使用@Configuration和@Bean注解,可以在Java类中定义和...

    spring chm文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    Spring 2.0 开发参考手册

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    spring framework 3 教程

    #### 第二章:Spring框架体系结构 - **核心容器(Core Container):** - 包括BeanFactory和ApplicationContext等核心接口和实现。这些接口负责对象的创建、装配以及生命周期管理。 - **数据访问集成(Data Access/...

    Spring中文帮助文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    Spring API

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    通向架构师的道路(第二十天)万能框架spring(二)maven结合spring与ibatis.docx

    通向架构师的道路(第二十天)万能框架Spring(二)Maven结合Spring与iBatis 本文档讲述了如何使用Maven结合Spring和iBatis来搭建SSI框架,解决了jar库无法管理、工程发布不方便、jar包占用空间过大、jar包冲突和...

    spring2.5 学习笔记

    #### 第二课:JDOM 的基本使用 - **简介**:JDOM 是 Java 文档对象模型 (Java Document Object Model),用于解析 XML 文件。 - **主要组件**: - `Document`:表示整个 XML 文档。 - `Element`:代表 XML 文档中的...

    千锋最新版spring6.0框架GA版详解.pdf

    创建一个简单的Spring配置文件,定义一个bean,并在主程序中获取该bean的实例。 4. **注解方式创建对象** 使用@Component、@Service、@Controller等注解声明bean,并使用@Autowired注解自动装配依赖对象。 5. *...

    跟我学spring

    【第四章】资源处理是指Spring如何加载和管理资源文件,比如配置文件等。4.1节介绍资源基础知识,4.2节探讨Spring内置的Resource实现,4.3节介绍如何访问这些资源,4.4节讲解Resource通配符路径的使用。 【第五章】...

    spring.net中文手册在线版

    第二十四章. 与Visual Studio.NET集成 24.1.XML编辑与验证 24.2.XML Schema的版本 24.3.集成API文档 第六部分. 快速入门程序 第二十五章. IoC快速入门 25.1.简介 25.2.Movie Finder 25.2.1.开始建立MovieFinder应用...

    Spring6_pdf版讲义.pdf

    - **Spring配置文件**:XML文件中定义了bean的声明、属性等信息。 - **bean**:表示应用程序中的对象,在Spring容器中进行管理。 #### 5. 启用Log4j日志框架 - **配置文件**:在Spring配置文件中配置Log4j。 - **...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    第十四章 内容管理系统 14.1 系统概述 14.2 需求分析 14.2.1 系统用例图 14.2.2 需求规格说明书 14.3 系统设计 14.3.1 设计视图层 14.3.2 设计持久层 14.3.3 设计业务逻辑层 14.3.4 设计控制层 14.4 架构设计和环境...

Global site tag (gtag.js) - Google Analytics