当前位置: 首页 > news >正文

springboot中获取某个注解下面的某个方法的方法名,参数值等等详细实例

在Spring Boot应用中,获取某个类或方法上的注解及其相关信息,包括方法名称、参数值等,通常涉及到反射和Spring的AOP(面向切面编程)特性。下面是一个示例,展示如何利用Spring AOP的@Around注解来拦截带有特定注解的方法,并获取其详细信息,包括方法名、参数值等。

步骤1: 定义自定义注解

首先,定义一个自定义注解,比如@CustomLog,这个注解将被用来标记那些需要特殊处理的方法。

 

Java

1import java.lang.annotation.ElementType;
2import java.lang.annotation.Retention;
3import java.lang.annotation.RetentionPolicy;
4import java.lang.annotation.Target;
5
6@Retention(RetentionPolicy.RUNTIME)
7@Target(ElementType.METHOD)
8public @interface CustomLog {
9    String description() default "";
10}

步骤2: 使用自定义注解

在某个服务类的方法上使用这个自定义注解。

 

Java

1@Service
2public class MyService {
3
4    @CustomLog(description = "这是一个示例方法")
5    public String exampleMethod(String param1, int param2) {
6        // 方法逻辑...
7        return "Hello, " + param1 + ", number: " + param2;
8    }
9}

步骤3: 创建切面(AOP)

接下来,创建一个切面类,使用@Around注解来拦截带有@CustomLog注解的方法,并获取方法信息。

 

Java

1import org.aspectj.lang.ProceedingJoinPoint;
2import org.aspectj.lang.annotation.Around;
3import org.aspectj.lang.annotation.Aspect;
4import org.aspectj.lang.reflect.MethodSignature;
5import org.springframework.stereotype.Component;
6
7@Aspect
8@Component
9public class CustomLogAspect {
10
11    @Around("@annotation(customLog)")
12    public Object logAround(ProceedingJoinPoint joinPoint, CustomLog customLog) throws Throwable {
13        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
14        String methodName = signature.getMethod().getName();
15        String description = customLog.description();
16        Object[] args = joinPoint.getArgs();
17        
18        // 打印方法名、描述和参数值
19        System.out.println("方法名: " + methodName);
20        System.out.println("描述: " + description);
21        System.out.print("参数值: ");
22        for (Object arg : args) {
23            System.out.print(arg + " ");
24        }
25        System.out.println(); // 换行
26        
27        // 执行原方法
28        Object result = joinPoint.proceed(args);
29        
30        // 可以在此处添加更多的日志处理逻辑
31        return result;
32    }
33}

在这个切面类中,logAround方法会在带有@CustomLog注解的方法执行前后被调用。通过joinPoint参数,我们可以访问到方法签名、方法参数等信息;而customLog参数则是直接获取到注解实例,进而获取注解的属性值,如description

通过上述步骤,当exampleMethod被调用时,切面将会打印出方法名、注解描述以及传递给方法的所有参数值。这只是一个基本示例,实际应用中可以根据需求扩展更多的日志处理逻辑。

http://www.lryc.cn/news/385083.html

相关文章:

  • 代码随想录——跳跃游戏Ⅱ(Leetcode 45)
  • 从0-1搭建一个web项目(package.json)详解
  • 图解ReentrantLock的基石AQS-独占锁的获取与释放
  • Perl语言入门学习读物
  • 电脑浏览器问题
  • [Docker] Ubuntu安装Home Assistant
  • 浅谈请求中数据转换
  • Flutter学习:从搭建环境到运行
  • sheng的学习笔记-AI-聚类(Clustering)
  • 从0构建一个录制UI测试工具
  • 代码随想录算法训练营第五十一天|LeetCode72 编辑距离、LeetCode647 回文子串、LeetCode516 最长回文子序列、动态规划的小总结
  • sessionStorage 能在多个标签页之间共享数据吗?
  • 鸿蒙期末项目(完结)
  • 【Linux】对共享库加载问题的深入理解——基本原理概述
  • easyui的topjui前端框架使用指南
  • Java中的程序异常处理介绍
  • Gradle学习-3 Gradle插件
  • 百度文心智能体,创建属于自己的智能体应用
  • 【软件测试】白盒测试与接口测试详解
  • 【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数
  • Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!
  • 手写SpringMVC之ApplicationContextListener
  • Paimon 在汽车之家的业务实践
  • 2024-06-27 问AI: 介绍一下 LLM building process
  • 猫也有自动厕所上了吗?自费分享好用的智能猫砂盆,看完不亏。
  • 《分析模式》漫谈07-怎样把一张图从不严谨改到严谨
  • 纯干货丨知乎广告投放流程和避坑攻略
  • mac 安装mysql启动报错 ERROR!The server quit without update PID file
  • TypeScrip环境安装与基础
  • 6.27学习总结