Spring_day03笔记

2019-03-11 12:51

—高级软件人才实作培训 专家! Spring_day03总结

今日内容

?

?

Spring的事务管理 三大框架整合

上次课的内容回顾:

Spring的AOP开发:

* AOP:面向切面编程,是对OO思想延伸. * AOP底层实现原理:动态代理.

* JDK动态代理:针对实现了接口的类生产代理. * CGLIB代理:针对没有实现接口的类,产生一个子类. * AOP术语:

* JoinPoint:可以被拦截点. * Ponitcut:真正被拦截. * Advice:通知,增强的代码.

* 引介:特殊通知,类级别上添加属性或方法. * Target:目标对象. * Proxy:代理对象. * Weaving: * Aspect:

* Spring的AOP的开发:

* 配置applicationContext.xml生成代理对象. * 使用ProxyFactoryBean类生产代理:

* 根据目标对象是否实现了接口,选择使用JDK还是CGLIB. * 缺点:需要为每个类都去配置一个ProxyFactoryBean.

* 采用Spring自动代理:

* 基于类名称的自动代理:(采用后处理Bean) * 基于切面信息的自动代理:(采用后处理Bean)

* Spring的AspectJ的切面开发.

* AspectJ:本身第三方切面框架. * AspectJ基于注解开发:

* 定义切面:

@Aspect * 定义增强:

1

@Before:前置通知. @Around:环绕通知.

@AfterReturing:后置通知.

—高级软件人才实作培训 专家! @AfterThrowing:异常抛出通知. @After:最终通知. * 定义切点:

@Pointcut

* AspectJ基于XML开发:

* 引入aop名称空间.

Spring的JDBCTemplate:

* 配置连接池:

* 默认 * DBCP

* C3P0(*****)

* 引入外部属性文件.

* 在DAO中注入JdbcTemplate.

* 在DAO中不直接注入模板.Dao集成JdbcDaoSupport. * CRUD的操作.

1.1 Spring的事务管理:

1.1.1 事务:

事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性:

ACID:

原子性:事务不可分割

一致性:事务执行的前后,数据完整性保持一致.

隔离性:一个事务执行的时候,不应该受到其他事务的打扰 持久性:一旦结束,数据就永久的保存到数据库.

如果不考虑隔离性:

脏读:一个事务读到另一个事务未提交数据

2

不可重复读:一个事务读到另一个事务已经提交数据(update)导致一个事务多次查询结果不一致 虚读:一个事务读到另一个事务已经提交数据(insert)导致一个事务多次查询结果不一致

事务的隔离级别:

未提交读:以上情况都有可能发生。

已提交读:避免脏读,但不可重复读,虚读是有可能发生。 可重复读:避免脏读,不可重复读,但是虚读有可能发生。 串行的:避免以上所有情况.

—高级软件人才实作培训 专家! 1.1.2 Spring中事务管理:

分层开发:事务处在Service层.

Spring提供事务管理API:

PlatformTransactionManager:平台事务管理器. commit(TransactionStatus status)

getTransaction(TransactionDefinition definition)

rollback(TransactionStatus status)

TransactionDefinition:事务定义

ISOLation_XXX:事务隔离级别.

PROPAGATION_XXX:事务的传播行为.(不是JDBC中有的,为了解决实际开发问题.) 过期时间:

TransactionStatus:事务状态

是否有保存点 是否一个新的事务 事务是否已经提交

关系:PlatformTransactionManager通过TransactionDefinition设置事务相关信息管理事务,管理事务过程中,产生一些事务状态:状态由TransactionStatus记录.

API详解:

PlatformTransactionManager:接口.

Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现

org.springframework.jdbc.datasource.DataSourceTransactionManager :

JDBC或iBatis 进行持久化数据时使用

使用Spring

3

org.springframework.orm.hibernate3.HibernateTransactionManager

Hibernate3.0版本进行持久化数据时使用

—高级软件人才实作培训 专家! : 使用

org.springframework.orm.jpa.JpaTransactionManager 使用JPA进行持久化时使用 org.springframework.jdo.JdoTransactionManager 当持久化机制是Jdo时使用

org.springframework.transaction.jta.JtaTransactionManager 使用一个JTA实现来管理事务,

在一个事务跨越多个资源时必须使用

TransactionDefinition:

* ISOLATION_DEFAULT:默认级别. Mysql repeatable_read

read_commited

ISOLATION_READ_UNCOMMITTED

ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE

* 事务的传播行为:(不是JDBC事务管理,用来解决实际开发的问题.)传播行为:解决业务层之间的调用的

事务的关系.

PROPAGATION_REQUIRED

* A,B

在一个事务中。)

PROPAGATION_SUPPORTS

* A,B * A,B * A,B

事务互不影响.)

PROPAGATION_NOT_SUPPORTED

* A,B

以非事务方式运行,如果有事务存在,挂起当前事务

非事务的方式运行,A有事务,就会挂起当前的事务.

PROPAGATION_MANDATORY

:支持当前事务,如果不存在,就不使用事务 :支持当前事务,如果不存在,抛出异常

如果A有事务,B使用A的事务,如果A没有事务,B就不使用事务. 如果A有事务,B使用A的事务,如果A没有事务,抛出异常.

如果A有事务,B将A的事务挂起,重新创建一个新的事务.(A,B不在一个事务中.

:支持当前事务,如果不存在 就新建一个

如果A有事务,B使用A的事务,如果A没有事务,B就开启一个新的事务.(A,B是

oracle

PROPAGATION_REQUIRES_NEW如果有事务存在,挂起当前事务,创建一个新的事务

PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常 PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

* 基于SavePoint技术. * A,B

* 常用:(重点)

PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW PROPAGATION_NESTED

A有事务,A执行之后,将A事务执行之后的内容保存到SavePoint.B事务有异常

的话,用户需要自己设置事务提交还是回滚.

4

—高级软件人才实作培训 专家1.1.3 Spring的事务管理: ! Spring的事务管理分成两类:

* 编程式事务管理:

* 手动编写代码完成事务管理. * 声明式事务管理:

* 不需要手动编写代码,配置.

1.1.4 事务操作的环境搭建:

CREATE TABLE `account` (

`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `money` double DEFAULT NULL, PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `account` VALUES ('1', 'aaa', '1000'); INSERT INTO `account` VALUES ('2', 'bbb', '1000'); INSERT INTO `account` VALUES ('3', 'ccc', '1000');

创建一个web项目:

* 导入相应jar包 * 引入配置文件:

* applicationContext.xml、log4j.properties、jdbc.properties

创建类:

* AccountService * AccountDao

在Spring中注册:

5


Spring_day03笔记.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:线面垂直的判定普通版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: