【SSM学习】01-3-Spring AOP

SSM(B站黑马)学习笔记

01-1-Spring概述
01-2-Spring IOC
01-3-Spring AOP
01-4-Spring 事务
02-SpringMVC
03-SSM整合
04-Maven高级
05-SpringBoot
06-MyBatisPlus



前言

SSM(B站黑马)学习笔记 01-3-Spring AOP


AOP

AOP简介

  • AOP(Aspect Oriented Programming)面向切面编程,是一种编程思想、一种编程范式,指导开发者如何组织程序结构
  • 作用:在不惊动原始设计等等基础上为其进行功能增强
  • Spring理念:无入侵式/无侵入式

如下图BookDaoImpl的实现类中save方法通过循环计算程序执行时间并进行循环打印,其它方法只有打印

当执行save方法时程序毫无疑问进行了循环打印并计算执行时间。但执行update和delete方法也循环打印并计算执行时间了,执行select方法又正常了。原因是使用了AOP对update和delete方法进行功能增强 select没有。这就是不惊动原始设计等等基础上为其进行功能增强


AOP核心概念

连接点是所有的方法,而切入点是被选中要加强的方法。通知是要在切入点执行的操作

连接点范围大,切入点范围小,切入点一定在连接点中。所有的方法都是连接点,我要增强的方法是切入点,就是说我要在这个方法切入

AOP快速入门

入门案例思路分析

image164



初始化环境

1.导入坐标依赖(pom.xml)
spring-aop包随着context默认一起导入的,aspects在前面Spring Framework系统架构有说

2.制作连接点方法(初始化环境已完成)
3.制作共性功能(通知类与通知)

4.定义切入点(@Pointcut)
5.绑定切入点与通知关系(切面)(@Before @After等)
@Component定义为bean交给Spring
@Aspect声明该类为AOP
@EnableAspectJAutoProxy告诉Spring有用注解开发的AOP 开启扫描注解AOP

执行AOP update通过AOP输出当前时间 save本来就有

AOP工作流程

切入点匹配成功 类型是BookDaoImpl 但对象是用代理对象 匹配失败则创建对象

匹配成功

匹配失败

补充:代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.

AOP切入点表达式

语法格式

通配符

书写技巧

AOP通知类型

@Before:前置通知,在原始方法运行之前执行

@After:后置通知,在原始方法运行之后执行

@Around:环绕通知,在原始方法运行的前后执(重要

在通知方法初传入ProceedingJoinPoint 对象 使用.proceed()方法表示对原始操作的调用
注意:环绕通知分无返回值和有返回值

无返回值

有返回值
定义有返回值select的切入点

当执行有返回值切入点的环绕通知,连接点无法正常返回值

异常的原因是它不匹配原始操作的返回值类型,如果原始操作无返回值还好,但当原始操作的返回是int或其它,要保证原来的操作有返回值,所以把返回值再抛出去

环绕通知的标准写法不管切入点有无返回值都要返回Object 切入点无返回值返回的是null

@AfterReturning:返回后通知,在原始方法执行完毕后运行,且原始方法执行过程中未出现异常现象 (了解)

@AfterThrowing:抛出异常后通知,在原始方法执行过程中出现异常后运行 (了解)
例如当程序出现 1/0

案例:测试业务层接口万次执行效率


案例初始化
pom.xml->配置SpringConfig注解开发->整合Mybatis、JUnit

1.导入依赖 开启扫描注解AOP

2.定义通知类制作通知
Signature对象保存了一次执行的签名信息,相当于封装了当前的执行过程,可以获得切入点的类型和方法名称等

3.运行测试类计算执行时间

AOP通知获取数据

有时候切入点要对数据的不同进行不同的处理,但通知执行都是统一操作,这时就要在通知里获取原始操作的数据进行不同处理的aop

demo初始内容

获取参数

JoinPoint:用于描述切入点的对象,必须配置成通知方法中的第一个参数,可用于获取原始方法调用的参数

ProceedingJoinPoint:专用于环绕通知,是JoinPoint子类,可以实现对原始方法的调用

pjp.proceed(args)可以把获取到的参数修改再还给原始操作,修改原始操作的传参

此方法多用于处理错误格式的数据保证程序正常运行,例如输入账户或密码时多了一个空格

获取返回值

//设置返回后通知获取原始方法的返回值,要求returning属性值必须与方法形参名相同 @AfterReturning(value = “pt()”,returning = “ret”)

如果原始操作有返回值,就把返回值装到形参ret里,如果要搭配JoinPoint,JoinPoint一定要放在形参第一个

获取异常(了解)

设置抛出异常后通知获取原始方法运行时抛出的异常对象,要求throwing属性值必须与方法形参名相同

手动抛出异常

案例:百度网盘密码数据兼容处理

模拟对提取码多余空格去除

案例初始化

业务处理

成功去除

AOP总结

aop适用于相同的大量使用功能,需要在很多地方加的,AOP是不二选择,简化共性功能的开发




注:

该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员2022最新SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值