二 Spring的事务
2.1 Spring中的事务控制方式
Spring的事务控制可以分为编程式事务控制和声明式事务控制。
编程式
开发者直接把事务的代码和业务代码耦合到一起,在实际开发中不用。
声明式
开发者采用配置的方式来实现的事务控制,业务代码与事务代码实现解耦合,使用的AOP思想。
2.2 编程式事务控制相关对象【了解】
2.2.1 PlatformTransactionManager
PlatformTransactionManager接口,是spring的事务管理器,里面提供了我们常用的操作事务的方
法。
注意:
2.2.2 TransactionDefinition
TransactionDefinition接口提供事务的定义信息(事务隔离级别、事务传播行为等等)
1)事务隔离级别
设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读(幻读)。
2)事务传播行为
事务传播行为指的就是当一个业务方法【被】另一个业务方法调用时,应该如何进行事务控制。
2.2.3 TransactionStatus
TransactionStatus 接口提供的是事务具体的运行状态。
可以简单的理解三者的关系:事务管理器通过读取事务定义参数进行事务管理,然后会产生一系列的事
务状态。
2.2.4 知识小结
Spring中的事务控制主要就是通过这三个API实现的
理解三者的关系:事务管理器通过读取事务定义参数进行事务管理,然后会产生一系列的事务状态。
2.3 基于XML的声明式事务控制【重点】
在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。底层采用AOP思想来实现的。
声明式事务控制明确事项:
核心业务代码(目标对象) (切入点是谁?)
事务增强代码(Spring已提供事务管理器))(通知是谁?)
切面配置(切面如何配置?)
2.3.1 快速入门
需求
使用spring声明式事务控制转账业务。
步骤分析
实现
省略
2.3.2 知识小结
2.4 基于注解的声明式事务控制【重点】
2.4.1 常用注解
步骤分析
实现
省略
2.4.2 知识小结
三 Spring集成web环境
3.1 ApplicationContext应用上下文获取方式
应用上下文对象是通过 new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但
是每次从容器中获得Bean时都要编写 new ClasspathXmlApplicationContext(spring配置文件) ,
这样的弊端是配置文件加载多次,应用上下文对象创建多次。
解决思路分析:
在Web项目中,可以使用ServletContextListener监听Web应用的启动,我们可以在Web应用启动
时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到最大的域
servletContext域中,这样就可以在任意位置从域中获得应用上下文ApplicationContext对象了。
3.2 Spring提供获取应用上下文的工具
上面的分析不用手动实现,Spring提供了一个监听器ContextLoaderListener就是对上述功能的封
装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供
了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象。
所以我们需要做的只有两件事:
1. 在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)
2. 使用WebApplicationContextUtils获得应用上下文对象ApplicationContext