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

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值