概述
重复注解
有时候你需要相同的注解在同一种类型或者定义上,这时候重复注解就发挥作用了。
我来看个定时执行的代码
@Component
public class ScheduledTasks {
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedDelay = 1500)
@Scheduled(fixedRate = 1000)
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
}
一个定时任务按照两种规则执行,一种是一个任务执行完延迟1500ms执行另一个,另一个是1000ms执行一个任务,不管其他任务有没有执行完毕。
因着兼容的原因,重复注解被存在一个由编译器自动生成的注解容器中,为了能让编译器做到如此,需要两步操作
1.定义重复注解类型
省略一些无关的元素,注解类型必须使用@Repeatable
元注解类型,
@Repeatable(Schedules.class)
public @interface Scheduled {
}
在@Repeatable
的括号里是存放注解的容器的类型,注解@Scheduled
存放在注解@Schedules
中。
2.定义包含注解的类型
包含注解的类型必须有个数组类型的value元素,数组的类型必须是重复注解的类型。
public @interface Schedules {
Scheduled[] value();
}
检索注解
Reflection Api中有检索注解的api,对于重复注解需要使用AnnotatedElement.getAnnotationsByType(Class<T> annotationClass)
代码如下:
public static void main(String[] args) {
Method[] methods = ScheduledTasks.class.getDeclaredMethods();
for (Method method : methods) {
Scheduled[] scheduleds = method.getAnnotationsByType(Scheduled.class);
for (Scheduled scheduled : scheduleds) {
System.out.println(scheduled);
}
}
}
最后
以上就是娇气老虎为你收集整理的java遗珠之重复注解重复注解检索注解的全部内容,希望文章能够帮你解决java遗珠之重复注解重复注解检索注解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复