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

奋斗吧
奋斗吧
擅长邻域:未填写

标签: 【Spring AOP基础使用:认识AOP AOP作用 核心概念 AOP实现】 博客 51CTO博客

2023-04-07 18:23:54 110浏览

【Spring AOP基础使用:认识AOP,AOP作用,核心概念,AOP实现】,SpringAOP基础使用:认识AOP,AOP作用,核心概念,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实现】_字符串_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实现】_AOP_08

  • ③ 制作切面 Aspect

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

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

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

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

【Spring AOP基础使用:认识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实现】_数据_12

  • ① 测试

Ⅰ 准备接口及实现类

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

Ⅱ 修改织入

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

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

Ⅲ 测试类测试

【Spring 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实现】_数据_19

Ⅲ 测试类测试

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


  • ② 总结

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


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

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

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

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


四、结尾

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




好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695