You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Aspect切面获取自定义注解的参数值?

实现方案

共有两种常用方式可以拿到自定义注解的属性值:

方式一:注解直接绑定到切面方法参数(推荐,代码更简洁)

修改切面类代码如下,Spring会自动将匹配的注解实例注入到切面方法的参数中,直接读取属性即可:

@Aspect
@Component
@EnableAspectJAutoProxy
public class CronLoggerAspect {
    
    private static final Logger log = LoggerFactory.getLogger(CronLoggerAspect.class);
    
    // 注意@annotation括号中写的是方法参数的变量名,要和下方参数名保持一致
    @Around("@annotation(cronLogger)")
    public Object trace(ProceedingJoinPoint joinPoint, CronLogger cronLogger) throws Throwable {
        // 直接读取注解的name属性
        String cronName = cronLogger.name();
        log.info("CronLogger注解name值:{}", cronName);
        
        // 原有获取入参的逻辑可以保留
        Object[] tab = joinPoint.getArgs();
        for (Object object : tab) {
            log.debug("CronLogger入参: {}", object);
        }
        return joinPoint.proceed();
    }
}

方式二:通过方法签名反射获取注解

如果不需要绑定参数,也可以从切点对象中拿到当前执行的方法,再反射读取注解:

@Aspect
@Component
@EnableAspectJAutoProxy
public class CronLoggerAspect {
    
    private static final Logger log = LoggerFactory.getLogger(CronLoggerAspect.class);
    
    @Around("@annotation(CronLogger)")
    public Object trace(ProceedingJoinPoint joinPoint) throws Throwable {
        // 从切点获取方法签名,再拿到当前执行的方法对象
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        // 读取方法上的自定义注解
        CronLogger cronLogger = method.getAnnotation(CronLogger.class);
        String cronName = cronLogger.name();
        log.info("CronLogger注解name值:{}", cronName);
        
        // 原有获取入参的逻辑可以保留
        Object[] tab = joinPoint.getArgs();
        for (Object object : tab) {
            log.debug("CronLogger入参: {}", object);
        }
        return joinPoint.proceed();
    }
}

两种方式最终都可以拿到你配置的unit test值,控制台会输出对应日志。你已经给CronLogger配置了RUNTIME保留策略,不需要额外修改注解代码。

内容的提问来源于stack exchange,提问作者Stéphane GRILLON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:15:06