Spring Day03

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才能实现对原始方法的调用,进而实现原始方法调用前后同时添加通知

  1. 通知中如果未使用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就是让其中的所有事务,都变成同一个事务,这样就能实现回滚了

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

相关推荐
刘宇涵492 小时前
链表头结点
java
笨手笨脚の2 小时前
链表与LinkedList
java·数据结构·链表·linkedlist
BD_Marathon2 小时前
Claude Code概述
java·开发语言
刘宇涵492 小时前
Java pos
java
这周也會开心2 小时前
Collections和Arrays工具类整理
java·开发语言
期待のcode2 小时前
Jackson
java·spring boot·json
摇滚侠2 小时前
Java 零基础全套视频教程,String StringBuffer StringBuilder 类,笔记142-144、146
java·开发语言·笔记
Coder_Boy_2 小时前
基于SpringAI的智能平台基座开发-(五)
java·人工智能·spring boot·langchain·springai
程序员码歌2 小时前
短思考第266天,玩IP路上的几点感悟,这几点很重要!
前端·后端·创业