ToB企服应用市场:ToB评测及商务社交产业平台

标题: Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注 [打印本页]

作者: 伤心客    时间: 2024-2-26 03:10
标题: Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注
学习视频:【编程不良人】2021年SpringBoot最新最全教程
第十一章、AOP

11.1 为什么要使用AOP

11.2 AOP的实现

11.3 JoinPoint 参数详解

JoinPoint参数可以在通知体内声明,用于获取有关方法执行的信息。JoinPoint参数提供了许多有用的方法,例如getSignature()可以获取方法的签名,getArgs()可以获取方法的参数列表,getTarget()可以获取目标对象等。通过JoinPoint参数,我们可以在通知中访问和操作方法执行时的上下文信息。
JoinPoint参数通常用于以下几种情况:
  1. 获取执行方法的信息
  2. @Before("execution(* com.example.service.*.*(..))") //
  3. public void before(JoinPoint joinPoint) {
  4.     String methodName = joinPoint.getSignature().getName();
  5.     String className = joinPoint.getTarget().getClass().getName();
  6.     Object[] args = joinPoint.getArgs();
  7.     System.out.println("Before 执行方法: " + methodName + " 在类:" + className);
  8.     System.out.println("方法参数 = " + Arrays.toString(args));
  9. }
复制代码
11.4 @Around 环绕附加操作

使用@Around注解的方法,参数必须声明ProceedingJoinPoint,这个参数可以控制目标方法的执行
  1. @Around("execution(* com.example.service.*.*(..))")
  2. public Object around(ProceedingJoinPoint pjp) throws Throwable {
  3.     System.out.println("======进入环绕的前置操作======");
  4.     System.out.println("当前执行类 = " + pjp.getSignature().getName());
  5.     System.out.println("方法名 = " + pjp.getTarget().getClass().getSimpleName());
  6.     //放行目标方法执行
  7.     Object proceed = pjp.proceed(); // 目标方法继续执行
  8.     System.out.println(" =====进入环绕的后置操作========= ");
  9.     return proceed;
  10. }
复制代码
11.5 自定义注解方式的切入点表达式@annotation

通过自定义注解@annotation实现切面的好处在于可以使切面的定义更加灵活和可重用。使用自定义注解可以将切面的逻辑和配置信息封装在注解中,使得切面的使用和配置变得更加简单和直观。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4