一、Spring AOP
1.SpringAOP简介
介绍:AOP:Aspect Oriented Programming,面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。
AOP利用一种称为“横切”的技术,剖开对象内部,并将公共行为封装到可重用模块,从而减少重复代码,降低耦合。
2.为什么要用AOP
1.分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
2.减少代码的重复,各个模块的重用性加强。
3.降低 模块间的耦合度,提高代码的可操作性和可维护性。
3.AOP的相关术语
1. 通知(Advice):定义了切点处所要执行的程序代码以及执行时机
2.连接点(Join point):是在应用执行过程中满足切点范围的具体的点
3.切点(Poincut):定义切面插入在哪些方法上,确定切面使用范围
4.切面(Aspect):是指封装横切到系统功能的类,包含通知和切点
5.织入(Weaving):是把切面插入到目标对象上
4.通知的类型
前置通知 | <aop:before> | @Before | 用于配置前置通知。指定增强的方法在切入点方法之前执行 |
后置通知 | <aop:AfterReturning> | @AfterReturning | 用于配置后置通知。指定增强的方法在切入点方法之后执行 |
环绕通知 | <aop:Around> | @Around | 用于配置环绕通知。指定增强的方法在切入点方法之前和之后都执行 |
异常抛出通知 | <aop:AfterThrowing> | @AfterThrowing | 用于配置异常抛出通知。指定增强的方法在出现异常时执行 |
最终通知 | <aop:After> | @After | 用于配置最终通知。无论增强方式执行是否有异常都会执行 |
5.AOP的使用
新增一个日志记录服务类“LogService”,并配置到容器中
引入Spring AOP相关的依赖
在Spring配置文件中加入AOP切面配置
执行结果
二、事务
1.什么是Spring的事务管理
是通过AOP代理实现的,对被代理对象的每个方法进行拦截,在方法执行前启动事务,在方法执行完成后根据是否有异常及异常的类型进行提交或回滚。
2.事务的基本事务属性
传播行为(propagation behavior)
隔离级别(isolation level)
是否只读(isReadOnly)
事务超时(timeout)
3.事务的ACID原则
原子性:一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做
一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
隔离性:事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
持久性:一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响
4.spring事务API介绍:
(1) PlatformTransactionManager【事务平台管理器】
是一个接口,定义了获取事务【getTransaction】、提交事务【commit】、回滚事务【rollback】的接口
(2)TransactionDefinition【事务定义信息】
是一个接口,定义了事务隔离级别、事务传播行为、事务超时时间、事务是否只读
5.为什么要事务隔离
脏读 :在一个事务中读取到了另外一个事务修改的【未提交的数据】,而导致多次读取同一个数据返回的结果不一致
不可重复读 : 在一个事务中读取到了另外一个事务修改的【已提交的数据】,而导致多次读取同一个数据返回的结果不一致
幻读(虚读): 一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录
6.具体实现(模拟银行转账业务事务管理 )
1.在数据库中创建一个表
2.引入相关依赖
3.创建模型类
4.创建Dao接口和实现类
5.创建service接口和实现类
6.编写jdbc.properties
注解方式:
Spring配置类SpringConfiguration
配置类JdbcConfig
事务管理器的优点:
数据一致性
数据可靠性
并发控制
提高性能