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就是让其中的所有事务,都变成同一个事务,这样就能实现回滚了

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

相关推荐
Elias不吃糖5 小时前
Java Lambda 表达式
java·开发语言·学习
情缘晓梦.5 小时前
C语言指针进阶
java·开发语言·算法
南知意-7 小时前
IDEA 2025.3 版本安装指南(完整图文教程)
java·intellij-idea·开发工具·idea安装
笔墨新城7 小时前
Agent Spring Ai 开发之 (一) 基础配置
人工智能·spring·agent
码农水水7 小时前
蚂蚁Java面试被问:混沌工程在分布式系统中的应用
java·linux·开发语言·面试·职场和发展·php
海边的Kurisu7 小时前
苍穹外卖日记 | Day4 套餐模块
java·苍穹外卖
晚风吹长发7 小时前
初步了解Linux中的动静态库及其制作和使用
linux·运维·服务器·数据结构·c++·后端·算法
毕设源码-邱学长8 小时前
【开题答辩全过程】以 走失儿童寻找平台为例,包含答辩的问题和答案
java
他们叫我技术总监8 小时前
Python 列表、集合、字典核心区别
android·java·python
江沉晚呤时8 小时前
从零实现 C# 插件系统:轻松扩展应用功能
java·开发语言·microsoft·c#