spring 自定义注解时使用AliasFor注解别名时 默认值无法被覆盖

事情是这样子的:

我想自定义一个缓存注解,用来缓存方法返回值,并且支持自定义缓存超时时间,注解定义是这样:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface MyCache {
   

    @AliasFor("value")
    int expireTime() default 60;

    @AliasFor("expireTime")
    int value() default 60;
}

本来只想写一个expireTime,但想着大家肯定能偷懒尽量偷懒嘛,那最好还是支持 @MyCache(50) 这种写法、省去一步。于是也有了上面的写法,使用spring提供的@AliasFor,显式的定义两个属性互为别名,目的就是如果不在注解中指定属性,则默认就是将值给到超时时间expireTime。

这样写也是看了spring里@Transactional注解的定义,按道理,应该是我配置了 @MyCache(50) 后,我在Advice代码中取这个注解的expireTime属性值时,应该是拿到value的值,即50,但实际效果却不是这样,expireTime的值仍为默认的60。

而我取值的代码如下:

@Around("myCache()")
public Object around(ProceedingJoinPoint pjp) {
   
    ......
    //获取方法对象
    Method curMethod = getMethodByJoinPoint(pjp, methodSignature);
    //出问题的是这一句!
    Annotation annotation = curMethod.getAnnotation(MyCache.class);
    Integer expireTime = (Integer) getAnnotationConfig(annotation, "expireTime");
    Integer ann
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值