AOP面向切面编程,一种编程范式,指导开发者如何组织程序结构
OOP面向对象编程
作用:在不惊动原始设计的基础上为其进行功能增强
Spring理念: 无入侵式/无侵入式
AOP核心概念:
连接点(JoinPoint): 程序执行过程中的任意位置,粒度为执行方法,抛出异常,设置变量等
在SpringAOP中,理解为方法的执行
切入点(Pointcut): 匹配连接点的方式
在SpringAOP 中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
匹配多个方法,所有的save方法,所有get开头的方法,所有Dao的结尾的接口中的任意方法,所以带有一个参数的方法
通知(Advice) :在切入点执行的操作,也就是共性功能
在SpringAOP中,功能最终以方法的形式呈现
通知类:定义通知的类
切面(Aspect):描述通知与切入点的对应关系
导入坐标

首先在配置类上写上 @EnableAspectJAutoProxy


切入点定义依托一个不具有实际意义的方法进行,即无参数,无返回值,方法体无实际逻辑

切入点与通知是通过引用来确认的

定义通知类受Spring容器管理,并定义当前类为切面类

争个AOP的实现过程是通过代理模式实现的

描述方法一:执行com.itheima.dao包下的BookDao接口中的无参数update方法
excution(void com.itheima.dao.BookDao.update())
描述方法二: 执行com.itheima.dao.impl包下的BookDaoImpl类中的无参数update方法
execution(void com.itheima.dao.impl.BookDaoImpl.update())
AOP切入点表达式
切入点表达式标准格式: 动作关键字( 访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名)
动作关键词: 描述切入点的行为动作,例如execution表示执行到指定切入点
访问修饰符: public , private 等,可以省略
返回值:
包名:
类/接口名:
方法名:
参数:
异常名:


AOP通知类型
AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置
AOP通知共分为5种类型
前置通知

后置通知

环绕通知(重点)
环绕通知是否扔出异常,为啥需要抛出异常,因为在Around中我需要对原始操作的调用,但是原始操作我并不知道是否有异常,所以要抛出
然后因为是环绕,我们需要对原来的操作进行调用,传入形参ProceedingJoinPoint pjp,用这个来调用,我需要告诉他们在原始操作之前进行调用,还是之后进行调用

上面是无返回值的,那么如果有返回值呢,那么我们就需要在Around上进行操作

返回后通知
抛出异常后通知(了解)
@Around注意事项
1.环绕通知必须依赖形参ProceedingJoinPoint才能实现对原始方法的调用,进而实现原始方法调用前后同时添加通知
- 通知中如果未使用ProceedingJoinPoint对原始方法进行调用将跳过原始方法的执行
3.对原始方法的调用可以不接收返回值,通知方法设置成void即可,如果接收返回值,必须设定为Object类型
4.原始方法的返回值如果是void类型,通知方法的返回值类型可以设置成void,也可以设置成Object
5.由于无法预知原始方法运行后是否会抛出异常,因此环绕通知方法必须抛出Throwable
AOP通知获取数据
获取切入点方法的参数
JoinPoint: 适用于前置后置返回后 抛出异常后通知
ProceedingJointPoint: 适用于环绕通知
获取切点点方法返回值
返回后通知
环绕通知
获取切入点方法运行异常信息
抛出异常后通知
环绕通知
怎么用形参去接收返回值,如图
并且如果有JoinPoint的话必须把它放到第一位


AOP总结:
概念 : 面向切面编程,一种编程范式
作用: 在不惊动原始设计的基础上位方法进行功能增强
核心概念
代理(Proxy): SpringAOP的核心本质是采用代理模式实现的
连接点(JoinPoint): 在SpringAOP中,理解为任意方法的执行
切入点(PointCut) : 匹配连接点的式子,也是具有共性功能的方法描述
通知(Advice) : 若干个方法的共性功能,在切入点处执行,最终体现一个方法
切面(Aspect) : 描述通知与切入点的对应关系
目标对象(Target): 被代理的原始对象称为 目标对象
通知类型
前置类型
后置类型
环绕通知(重点):
环绕通知依赖形参ProceedingJoinPoint 才能实现对原始方法的调用
环绕通知可以隔离原始方法的调用执行
环绕通知返回值设置为Object类型
环绕通知后可以对原始方法调用过程中出现的异常进行处理
返回后通知
抛出异常后通知
Spring事务简介
事务作用: 在数据层保障一系列的数据库操作同成功同失败
Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

Spring注解式事务通常添加在业务层接口中而不会添加业务层实现类中,降低耦合
注解式事务可以添加到业务方法上表式当前方法开始事务,也可以添加到接口上表示当前接口所有方法开启事务

、
Transaction怎么实现回滚呢,Transanction就是让其中的所有事务,都变成同一个事务,这样就能实现回滚了


事务传播行为: 事务协调员对事务管理员所携带事务的处理态度
