一、基础Spring的标准测试

  1、导入spring与junit继承的jar

  2、引入注解

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/resources/applicationContext.xml")
public class UserDaoImplTest{

}

二、Spring的事务控制

  1、事务的特点

    a、隔离属性(isolation)

      解决并发访问的问题。

      脏读:Isolation.READ_COMMITED(该项为默认值)

        一个事务读取了另一个事务没有提交的数据。

      不可重复读:Isolaiton.REPEATABLE_READ(行锁)

        在一个事务中,对相同的数据,进行多次查询,但是查询的结果不同。

      幻影读:Isolation.SERIALZBLE(表锁)

        在一个事务中,对某张表进行相同的操作,但是操作结果不一致。

      ps:

      并发安全:READ_COMMITED < REPEATABLE_READ < SERIALZBLE

      并发效率:READ_COMMITED > REPEATABLE_READ > SERIALZBLE

      建议:建议使用READ_COMMITED。

    b、传播属性(propagation)

      解决事务嵌套的问题。

      Propagation.REQUIRED(该项为默认值) 增删改的业务方法

        如果外部没有事务,则开启新的事务。

        如果外部存在事务,则融合到外部的事务中。

      Propagation.SUPPORTS 查询的业务方法

        如果外部没有事务,则不开启事务。

        如果外部存在事务,则融合到外部的事务中。

      Propagation.REQUIRES_NEW

        如果外部没有事务,则开启新的事务。

        如果外部存在事务,则挂起外部的事务,新开启一个事务执行,执行完毕后,唤起外部事务。

    c、只读属性(read-only)

      查询的业务方法,指定read-only=true。

      read-only=false(该项为默认值)

    d、超时属性 (timeout)

      当访问的数据,被别的事务锁住后,通过超时属性指定当前事务,最多等待多少秒。

      timeout = -1(该项为默认值) 由数据库底层决定等待的时间。

//示例代码
//在类上加@Transactional注解,表示该类中的方法均添加事务,其属性采用默认值
@Transactional
public class AdminServiceImpl implements AdminService{

    private AdminDao adminDao = new AdminDaoImpl();

//因为该方法执行查询操作,其传播属性和只读属性采用默认值是不合适的,所以单独设定。    
  @Transactional(propagation=Propagation.SUPPORTS,readOnly=true) public Admin login(Admin admin){ return adminDao.login(admin); } }

   2、配置文件

<!-- spring控制事务 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

      

      

浅谈Spring(三)的更多相关文章

  1. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  2. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  3. 浅谈C++三种传参方式

    浅谈C++三种传参方式 C++给函数传参中,主要有三种方式:分别是值传递.指针传递和引用传递. 下面通过讲解和实例来说明三种方式的区别. 值传递 我们都知道,在函数定义括号中的参数是形参,是给函数内专 ...

  4. 1.1浅谈Spring(一个叫春的框架)

    如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...

  5. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  6. 浅谈Spring解决循环依赖的三种方式

    引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...

  7. 浅谈spring 声明式事物

    此处主要讲讲事物的属性. 事物属性包含了五个方面: 1.传播行为 2.隔离规则 3.回滚规则 4.事物超时 5.是否只读 一.传播行为 事务的第一个方面是传播行为(propagation behavi ...

  8. 浅谈spring security 403机制

    403就是access denied ,就是请求拒绝,因为权限不足 三种权限级别 一.无权限访问 <security:http security="none" pattern ...

  9. [SSH 3]以网上商城项目浅谈spring配置

    导读:在做ITOO项目的时候,就用到了容器+反射,从而运用了依赖注入和依赖查找.如果看过WCF端的配置文件,那么对于这个spring的配置就很容易理解.本篇博客,是对于自己做的一个小项目中所运用到的s ...

随机推荐

  1. 网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点

    2 鞍点(5分) 题目内容: 给定一个n*n矩阵A.矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数.一个矩阵A也可能没有鞍点. 你的任务是找出A的鞍点. 输入格 ...

  2. 轻松实现语音识别的完整代码在android开发中

    苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技术将其发扬光大. * C ...

  3. 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

    在进行UI布局的时候,可能常常会用到 android:gravity  和 android:layout_Gravity 这两个属性. 关于这两个属性的差别,网上已经有许多人进行了说明,这边再简单说一 ...

  4. rem vh vw vmin vmax ex ch

    rem 我们首先介绍下和我们熟悉的很相似的货.em 被定义为相对于当前对象内文本的字体大小.如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于body设 ...

  5. 第三章SignalR在线聊天例子

    第三章SignalR在线聊天例子 本教程展示了如何使用SignalR2.0构建一个基于浏览器的聊天室程序.你将把SignalR库添加到一个空的Asp.Net Web应用程序中,创建用于发送消息到客户端 ...

  6. iphone--有关日历中NSDateFormatter中英文

    在使用日历使用中,获取星期的时候 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFo ...

  7. iOS开发那些事儿(二)热补丁

    一.热补丁作用:修复导致崩溃的错误.替换/增加方法.替换原来的界面等等 二.实现手段:JSPatch (使用Objective-C Objective-C和JavaScript jspatch桥.你可 ...

  8. (转)C#DataTable学习心得

    一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...

  9. Git 系列(三):建立你的第一个 Git 仓库

    现在是时候学习怎样创建你自己的 Git 仓库了,还有怎样增加文件和完成提交. 在本系列前面的文章中,你已经学习了怎样作为一个最终用户与 Git 进行交互:你就像一个漫无目的的流浪者一样偶然发现了一个开 ...

  10. 使用JQuery.lettering.js实现多行文本样式自定义

    前几天一位在广告公司的朋友发来求助,说:“有一个项目要求实现对字符串进行动态拆分,然后对拆分出的字符分别使用不同的样式效果...”,听到这个需求,我内心有点不屑,这有何能,最多五分钟搞定啊~~ 于是我 ...