首页 > 其他分享 >【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】

时间:2023-04-07 13:32:05浏览次数:45  
标签:Spring 切入点 ProceedingJoinPoint 通知 核心 注解 AOP 切面

本文纲要

  • 一、了解AOP
    1、认识AOP
    2、AOP作用
    3、AOP核心概念
  • 二、AOP快速入门
    1、基础准备
    2、AOP实现
    3、总结
  • 三、AOP获取通知数据
    1、JoinPoint
    2、ProceedingJoinPoint
    3、获取通知数据的使用场景

进入正文:

一、了解AOP

1、认识AOP

AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构。

2、AOP作用

在不侵入原始设计的基础上,进行功能增强。

3、AOP核心概念

  • ① 连接点 Join Point

程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等。在Spring AOP中可以理解为执行方法。

  • ② 切入点 Pointcut

匹配连接点的式子,可以匹配一个或者多个。

  • ③ 通知 Advice

在切入点处执行的操作,共性功能。

  • ④ 切面 Aspect

描述通知Advice与切入点Pointcut的关系。

  • ⑤ 通知类

定义通知的类。


二、AOP快速入门

1、基础准备

  • ① 导入依赖

Ⅰ spring-context:spring核心容器bean、context相关;

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串

其中该依赖包含了AOP相关的依赖内容,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_02


Ⅱ aspectjweaver:AOP需要的依赖;

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_03

  • ② 编写接口与实现类

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_04

  • ③ 创建Spring配置类

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_数据_05

  • ④ 编写运行类

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_06

2、AOP实现

  • ① 定义通知类和通知 Advice

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_07

  • ② 定义切入点 Pointcut

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_08

  • ③ 制作切面 Aspect

我们知道切面是用于描述通知Advice与切入点Pointcut的关系,此处我们在通知Advice上使用@Before注解,描述"pt()"与method通知的关系,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_09

  • ④ 将通知类配置给Context容器并标识为切面类

在我们的通知类上添加@Component注解和@Aspect注解,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_10

  • ⑤ 开启注解格式AOP功能

在我们的配置类上添加@EnableAspectJAutoProxy注解,开启注解格式AOP功能,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_数据_11

  • ⑥ 测试

3、总结

  • ① 相关注解

@EnableAspectJAutoProxy:用于配置类上,开启注解格式AOP功能;
@Aspect:用于切面类上,设置当前类为AOP切面类;
@Pointcut:用于切点空方法上,设置切入点方法;
@Before、@After、@Around、@AfterReturning、@AfterThrowing:用于通知方法上方,设置当前通知方法与切入点之间绑定关系。


  • ② 切入点表达式

切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数) 异常名)

*:单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现;
..:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写;
+:专用于匹配子类类型。


三、AOP获取通知数据

1、JoinPoint

我们可以在对应的通知内传入参数JoinPoint,其可以帮助我们获取被增强方法所传递的参数,具体如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_12

  • ① 测试

Ⅰ 准备接口及实现类

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_13

Ⅱ 修改织入

a、切点表达式处添加了参数String类型;
b、通知方法内添加了参数获取与打印;

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_14

Ⅲ 测试类测试

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_15

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_16


  • ② 总结

JoinPoint是非环绕通知采用的获取方式,如:@Before、@After。

2、ProceedingJoinPoint

环绕通知使用的是ProceedingJoinPoint,因为ProceedingJoinPoint是JoinPoint类的子类,所以对于ProceedingJoinPoint类中应该也会有对应的getArgs()方法。


  • ① 测试

Ⅰ 修改接口和实现类方法

此处我们添加了返回值的设置,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_数据_17

Ⅱ 修改切点表达式

由于我们设置了返回值,此处修改表达式中的对应返回值部分,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_数据_18

Ⅲ 添加织入

Object result = joinPoint.proceed();相比于前者,ProceedingJoinPoint多了执行原方法的逻辑,而且可以获得返回值,如下:

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_19

Ⅲ 测试类测试

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_AOP_20


  • ② 总结

ProceedingJoinPoint用于@Around环绕通知的情形。


3、获取通知数据的使用场景

如:对传入密码的或者其他字符串的统一去除首位空格的操作。

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】_字符串_21

此通知中,我们就能实现对对应字符串进行trim操作。


四、结尾

以上即为Spring AOP基础使用的全部内容




标签:Spring,切入点,ProceedingJoinPoint,通知,核心,注解,AOP,切面
From: https://blog.51cto.com/u_15874356/6176030

相关文章