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

相关推荐
ygl615037324 分钟前
Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统
java·spring boot·vue
Code哈哈笑27 分钟前
【Java 学习】构造器、static静态变量、static静态方法、static构造器、
java·开发语言·学习
是老余28 分钟前
Java三大特性:封装、继承、多态【详解】
java·开发语言
鸽鸽程序猿29 分钟前
【JavaEE】Maven的介绍及配置
java·java-ee·maven
尘浮生1 小时前
Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·maven
耀耀_很无聊5 小时前
第1章 初识SpringMVC
java·spring·mvc
麻衣带我去上学5 小时前
Spring源码学习(一):Spring初始化入口
java·学习·spring
东阳马生架构5 小时前
MySQL底层概述—1.InnoDB内存结构
java·数据库·mysql
手握风云-6 小时前
数据结构(Java版)第一期:时间复杂度和空间复杂度
java·数据结构
坊钰6 小时前
【Java 数据结构】时间和空间复杂度
java·开发语言·数据结构·学习·算法