spring-aop 的 基础使用(啥是增强类、切点、切面)- 2

在 spring-aop 的 基础使用(啥是增强类、切点、切面) 的基础上,

这里讲如何,在 增强类 的方法中,获取 目标方法 的一些信息

目录结构,

新增加了一个 MyAdvice类

新增加一个 MyAdvice类

java 复制代码
package com.english.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.lang.reflect.Modifier;

/**
 * 在 增强类 的方法中,获取,目标方法的信息
 *
 * 1、获取,目标方法的方法名、参数、访问修饰符、所属的类信息
 *      在 增强方法 添加 JoinPoint joinPoint 参数,
 *      JoinPoint 就包含了目标方法的信息
 *
 * 2、获取,目标方法的返回结果
 *      只有 @AfterReturning 能获取 目标方法 的返回结果
 *      @AfterReturning(value = "execution(* com..impl.*.*(..))", returning = "myret")
 *      public void afterReturning(JoinPoint joinPoint, Object myret)
 * 
 * 3、获取,目标方法的异常信息
 *      @AfterThrowing(value = "execution(* com..impl.*.*(..))", throwing = "mythrowable")
 *      public void afterThrowing(JoinPoint joinPoint, Throwable mythrowable)
 *
 */
@Aspect
@Component
public class MyAdvice {

    @Before("execution(* com..impl.*.*(..))")
    public void before(JoinPoint joinPoint) {
        // 获取方法属于的类的信息
        String simpleName = joinPoint.getTarget().getClass().getSimpleName();
        System.out.println("simpleName=" + simpleName);

        // 获取访问修饰符
        int modifiers = joinPoint.getSignature().getModifiers(); // int类型
        String s = Modifier.toString(modifiers); // 将 int 转换为 对应的字符串

        // 获取方法名
        String name = joinPoint.getSignature().getName();
        System.out.println("name= " + name);

        // 获取目标方法的参数
        Object[] args = joinPoint.getArgs();
    }

    @AfterReturning(value = "execution(* com..impl.*.*(..))", returning = "ret")
    public void afterReturning(JoinPoint joinPoint, Object ret) {
    }

    @AfterThrowing(value = "execution(* com..impl.*.*(..))", throwing = "throwable")
    public void afterThrowing(JoinPoint joinPoint, Throwable throwable) {
    }

    @After("execution(* com..impl.*.*(..))")
    public void after(JoinPoint joinPoint) {
        System.out.println("after");
    }
}
相关推荐
学长毕设31 分钟前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn1 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川1 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵1 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David2 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1002 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin2 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质3 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain3763 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法