`
8366
  • 浏览: 813253 次
  • 性别: 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. ...

    Java EE企业级应用开发教程 Spring+Spring MVC+MyBatis 第2版 Jav 第2版源码

    《Java EE企业级应用开发教程》第二版,结合Spring、Spring MVC和MyBatis三大框架,为读者提供了全面深入的Java后端开发学习路径。这本书的源码资源旨在帮助开发者通过实践来理解并掌握企业级应用开发的核心技术。 ...

    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 介绍**:JDOM 是 Java Document Object Model 的缩写,是一种用于处理 XML 文件的轻量级工具包。 - **关键概念**:理解`Document`、`Element`、`Attribute`等基本元素及其...

    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。 - **...

Global site tag (gtag.js) - Google Analytics