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

相关推荐
foundbug9996 分钟前
Modbus协议C语言实现(易于移植版本)
java·c语言·前端
听风吟丶10 分钟前
Java 反射机制深度解析:从原理到实战应用与性能优化
java·开发语言·性能优化
一缕猫毛10 分钟前
Flink demo代码
java·大数据·flink
小安同学iter16 分钟前
天机学堂-优惠券功能-day09(七)
java·spring cloud·微服务·jenkins·优惠券·天机学堂
it_czz18 分钟前
MCP调用流程图
java
爱学习的小可爱卢26 分钟前
JavaEE进阶——SpringBoot统一功能处理实战指南
java·spring boot·java-ee
小单于PRO41 分钟前
Spring Boot 实现构建一个轻量级地图瓦片服务
java·spring boot·后端
Selegant44 分钟前
Spring Boot 3 + Java 21 全新特性实战:虚拟线程、结构化并发与 Record 类型
java·spring boot·后端
Jinkxs1 小时前
Java 架构 02:DDD 领域模型设计实战(限界上下文划分)
java·开发语言·架构
百锦再1 小时前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构