spring 自定义注解时使用AliasFor注解别名时 默认值无法被覆盖
事情是这样子的:
我想自定义一个缓存注解,用来缓存方法返回值,并且支持自定义缓存超时时间,注解定义是这样:
1 | |
本来只想写一个expireTime,但想着大家肯定能偷懒尽量偷懒嘛,那最好还是支持 @MyCache(50) 这种写法、省去一步。于是也有了上面的写法,使用spring提供的@AliasFor,显式的定义两个属性互为别名,目的就是如果不在注解中指定属性,则默认就是将值给到超时时间expireTime。
这样写也是看了spring里@Transactional注解的定义,按道理,应该是我配置了 @MyCache(50) 后,我在Advice代码中取这个注解的expireTime属性值时,应该是拿到value的值,即50,但实际效果却不是这样,expireTime的值仍为默认的60。
而我取值的代码如下:
1 | @Around("myCache()") |
获取注解这一步有问题,@AliasFor是spring提供的注解,想要保证获取属性值能感知到,需要使用spring提供的工具方法获得注解,如下所示:
1 | ...... |
进一步延伸:如果注解里的两个属性相互加别名后,使用注解时两个都设置了值,会怎样?
类似这样:
1 | @MyCache(expireTime = 40, value = 50) |
**程序直接无法启动!**会报如下异常:
1 | ...... |