Spring入门Blog[十二、Spring中Annotation声明事务]

原创 2015年12月23日 11:43:42

转自:http://blog.csdn.net/zhang6622056/article/details/7702579


Spring的声明式事务Annotation的实现------AOP应用

首先先讨论一个问题:

事务放在service层还是放在dao层呢?

Dao层只是针对于某一个实体进行CRUD的操作。如果在增加删除一个表的时候。比如USER我们要在LOG表中记录相应的日志。那么在DAO层如何完成。所以说Service层可能操作多个实体类。所以事务加载service层比较合适。因为不论我们保存哪一个实例出现了错误我们都可以回滚。而不是Log插入了,User没插入。反之亦然,这都是我们不愿意看到的。

 

下面举例Spring中事务通过Annotation方式是如何实现的:

1、  加入tx开头的命名空间并且配置事务manager和driven。代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.      xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  8.            http://www.springframework.org/schema/context  
  9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  10.            http://www.springframework.org/schema/tx  
  11.            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
  12.            http://www.springframework.org/schema/aop  
  13.            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  
  14.     <context:annotation-config />  
  15.     <!-- 配置容器资源扫描的包 -->  
  16.     <context:component-scan base-package="com.spring" />  
  17.     <!-- 将前面类写入容器 -->  
  18.     <bean id="logInterceptor" class="com.spring.aop.LogInterceptor" />  
  19.   
  20.   
  21.   
  22.     <!--  
  23.         配置数据源 <bean id="myDataSource"  
  24.         class="org.apache.commons.dbcp.BasicDataSource"  
  25.         destroy-method="close"> <property name="driverClassName"  
  26.         value="com.mysql.jdbc.Driver"/> <property name="url"  
  27.         value="jdbc:mysql://localhost:3306/sms"/> <property name="username"  
  28.         value="root"/> <property name="password" value="root"/> </bean>  
  29.     -->  
  30.   
  31.       
  32.     <!-- placeholder 占位符 -->  
  33.     <bean  
  34.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  35.         <property name="locations">  
  36.             <value>classpath:jdbc.properties</value>  
  37.         </property>  
  38.     </bean>  
  39.     <!-- 配置dataSource -->  
  40.     <bean id="dataSource" destroy-method="close"  
  41.         class="org.apache.commons.dbcp.BasicDataSource">  
  42.         <property name="driverClassName" value="${jdbc.driverClassName}" />  
  43.         <property name="url" value="${jdbc.url}" />  
  44.         <property name="username" value="${jdbc.username}" />  
  45.         <property name="password" value="${jdbc.password}" />  
  46.     </bean>  
  47.   
  48.     <!-- 将配置好的dataSource注入到SessionFactory中-->  
  49.     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  50.     <property name="dataSource" ref="dataSource"/>  
  51.     <property name="mappingResources">  
  52.       <list>  
  53.         <value>com/spring/model/user.hbm.xml</value>  
  54.         <value>com/spring/model/userlog.hbm.xml</value>  
  55.       </list>  
  56.     </property>  
  57.     <property name="hibernateProperties">  
  58.       <value>  
  59.         hibernate.dialect=org.hibernate.dialect.MySQLDialect  
  60.         hibernate.show_sql=true  
  61.         hibernate.hbm2ddl.auto=create  
  62.       </value>  
  63.     </property>  
  64.   </bean>  
  65.       
  66.       
  67.     <!-- 声明式事务管理,事务需要数据源,从sessionFactory中拿到  
  68.     这是一个AOP的应用 -->  
  69. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  70.   <property name="sessionFactory" ref="sessionFactory" />  
  71. </bean>  
  72. <!-- 声明式事务注解的配置 -->  
  73. <tx:annotation-driven />  
  74. </beans>  
2、在Java文件上使用注解标签:
  1. //在Service层加入事务的控制。具体逻辑不在给予。  
  2. //在下面方法前面加逻辑  
  3.     /*事务的传播性。如果当前执行环境中有事务,那么则会一直在 
  4.      * 传播环境中传播下去。如果没有事务那么则会创建一个事务 
  5.     */  
  6.     @Transactional(propagation=Propagation.REQUIRED)  
  7.     public void save(User u){  
  8.         u.setName("zhanglong");  
  9.         UserLog log = new UserLog();  
  10.         log.setMsg("user added");  
  11.         userDaoImpl.save(u);  
  12.         userLogDaoImpl.save(log);  
  13.     } 
版权声明:本文为博主原创文章,未经博主允许不得转载。

【spring框架】spring使用Annotation进行声明式事务管理

声明式的事务管理 a)事务加在DAO层还是Service层? UserService调了UserDao,调了它的save方法,而UserDao它会去访问数据库。 在Dao里面,事务的还是就是save...
  • u013517797
  • u013517797
  • 2015年03月26日 16:42
  • 977

spring事物配置,声明式事务管理和基于@Transactional注解的使用

事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTempla...
  • bao19901210
  • bao19901210
  • 2014年12月04日 15:17
  • 131866

spring 声明式事务原理解读

在Spring中,声明式事务是通过事务属性(transaction attribute)来定义的。事务属性描述了事务策略如何应用到方法上。事务属性包含5个方面: 传播行为隔离级别是否只读事务超时回...
  • wei83523408
  • wei83523408
  • 2016年05月27日 22:26
  • 6584

spring 声明式事务管理注解方式实现

使用注解实现Spring的声明式事务管理,更加简单! 步骤:          1) 必须引入Aop相关的jar文件          2) bean.xml中指定注解方式实现声明式事务管理以及应用的...
  • u014010769
  • u014010769
  • 2015年07月31日 20:09
  • 1752

spring+springmvc声明式事务失效

spring声明式事务失效
  • qq761427213
  • qq761427213
  • 2016年05月05日 10:36
  • 346

那些年spring声明式事务@Transaction的坑

作为开发人员,我相信同学们都会遇到这样的一个业务场景:一个业务方法90%的逻辑都是在做查询,只有最后一部分才是对数据的更新。如果更新失败则业务回滚。常见的做法就是在该方法上加一个@Transactio...
  • y943623901
  • y943623901
  • 2016年03月10日 16:49
  • 7353

Spring学习之Spring的声明式事务管理详解

声明式事务管理大多数Spring用户选择声明式事务管理的原因是,这个是对应用代码影响最小的选择,因此也最符合 非侵入式 轻量级容器的理念。 Spring声明式事务管理可以在任何环境下使用。只需更改配置...
  • u011726984
  • u011726984
  • 2015年05月01日 19:30
  • 7287

spring+springMVC,声明式事务失效,原因以及解决办法

1.声明式事务配置: 1.声明书
  • yu412346928
  • yu412346928
  • 2014年04月30日 19:56
  • 1775

Spring声明式事务管理与配置介绍

一、Spring声明式事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spri...
  • andyzhaojianhui
  • andyzhaojianhui
  • 2016年07月21日 14:47
  • 3365

Spring事务管理实现方式之编程式事务与声明式事务详解

1.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理) Spring实现编程式事务,依赖于2大类,分别是上篇文章提到的PlatformTransactionManager,与模版类Tran...
  • liaohaojian
  • liaohaojian
  • 2017年04月12日 09:49
  • 4625
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring入门Blog[十二、Spring中Annotation声明事务]
举报原因:
原因补充:

(最多只允许输入30个字)