如何获取注解的参数值

网上关于这一点的文章似乎不很多,随手记一笔。

注解的处理

注解可以用在2个阶段:编译期和运行期。

编译期注解可用javac的Annotation Processor 来处理,我们需要定义自己的Annotation Processor 供javac使用,这里面有一定的规范,可参考相关文章解决。

运行期注解在spring下可用@Aspect切面编程来处理,比如我们的注解如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String lockName();

    int leaseTime();
}

处理该注解的方法如下:

@Component
@Aspect
@Slf4j
public class CustomAspect {

    ...

    @Around("@annotation(annoInst)")
    public Object doAround(ProceedingJoinPoint pjp, MyAnnotation annoInst) throws Throwable {
        // 前置处理
        ...
            
        try {
            return pjp.proceed();
        } finally {
            // 后置处理
            ...
        }
    }
}

我们先用@Component+@Aspect定义一个处理注解的spring bean。这里我们要获取注解的参数值,所以doAround函数要加上如下注解:

@Around("@annotation(annoInst)")

表明我们的环绕(around)操作要处理的是一个MyAnnotation类型注解的实例annoInst,annoInst必须声明为doAround函数的一个参数

如果我们并不需要处理注解参数,可以这样写:

@Component
@Aspect
@Slf4j
public class CustomAspect {

    ...

    @Around("@annotation(MyAnnotation)")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        // 前置处理
        ...
            
        try {
            return pjp.proceed();
        } finally {
            // 后置处理
            ...
        }
    }
}

注意:这里我们仅仅在@annotation里声明了注解的类型,且doAround函数参数里也不带MyAnnotation注解实例。

顺带说一下,@Around除了@annotation,还能支持execution表达式,后者能力非常灵活,可以指定到特定类的特定函数,网上有很多介绍文章,这里就不赘述了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值