@Repeatable注解表明标记的注解可以多次应用于相同的声明或类型,此注解由Java SE 8版本引入。以下示例如何使用此注解:

第一步,先声明一个重复注解类:

package org.springmorning.demo.javabase.annotation.meta;

import java.lang.annotation.Repeatable;

/**
* @author 春晨
* @date 2019/1/14 20:25
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10279083.html
*/
@Repeatable(Schedules.class)
public @interface Schedule {
String dayOfMonth() default "first";
String dayOfWeek() default "Mon";
int hour() default 12;
}

第二步,再声明一个容器注解类:

package org.springmorning.demo.javabase.annotation.meta;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; /**
* @author 春晨
* @date 2019/1/14 20:26
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10279083.html
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Schedules {
Schedule[] value();
}

最后,创建一个测试类:

package org.springmorning.demo.javabase.annotation.meta;

import java.lang.reflect.Method;

/**
* @author 春晨
* @date 2019/1/14 20:27
* Copyright 2019 春晨 https://www.cnblogs.com/springmorning/p/10279083.html
*/
@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Wed", hour=24)
public class RepetableAnnotation{ @Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Fri", hour=23)
public void doPeriodicCleanup(){} public static void main(String[] args) throws NoSuchMethodException { Method doPeriodicCleanup = RepetableAnnotation.class.getMethod("doPeriodicCleanup"); Schedules schedules = doPeriodicCleanup.getAnnotation(Schedules.class);
System.out.println("获取标记方法上的重复注解:");
for (Schedule schedule: schedules.value()){
System.out.println(schedule);
} System.out.println("获取标记类上的重复注解:");
if (RepetableAnnotation.class.isAnnotationPresent(Schedules.class)){
schedules = RepetableAnnotation.class.getAnnotation(Schedules.class);
for (Schedule schedule: schedules.value()){
System.out.println(schedule);
}
} }
}

运行结果:

获取标记方法上的重复注解:
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=12, dayOfMonth=last, dayOfWeek=Mon)
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=23, dayOfMonth=first, dayOfWeek=Fri)
获取标记类上的重复注解:
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=12, dayOfMonth=last, dayOfWeek=Mon)
@org.springmorning.demo.javabase.annotation.meta.Schedule(hour=24, dayOfMonth=first, dayOfWeek=Wed)

下节继续

下节将给大家讲解预定义注解@Override的使用

@Repeatable元注解的使用的更多相关文章

  1. 【Java编程思想笔记】注解--元注解

    参考文章:(小白的小小白的白 )https://blog.csdn.net/weixin_42315600/article/details/80630669 https://www.cnblogs.c ...

  2. JAVA 注解教程(二)元注解

    简介 元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面 元注解有 @Retention.@Documented.@Target.@Inherited.@Rep ...

  3. spring源码解析:元注解功能的实现

    前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...

  4. Java 元注解

    元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elemen ...

  5. Java元注解

    元注解是指注解的注解,包括@Retention @Target @Document @Inherited四种. 1.@Retention: 定义注解的保留策略@Retention(RetentionP ...

  6. [读书笔记] 二、条件注解@Conditional,组合注解,元注解

    一.条件注解@Conditional,组合注解,元注解 1. @Conditional:满足特定条件创建一个Bean,SpringBoot就是利用这个特性进行自动配置的. 例子: 首先,两个Condi ...

  7. 自定义注解,andjdk提供的元注解

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitN ...

  8. Spring Boot实战笔记(九)-- Spring高级话题(组合注解与元注解)

    一.组合注解与元注解 从Spring 2开始,为了响应JDK 1.5推出的注解功能,Spring开始大量加入注解来替代xml配置.Spring的注解主要用来配置注入Bean,切面相关配置(@Trans ...

  9. Java开发笔记(八十二)注解的基本单元——元注解

    Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...

  10. Spring注解与Java元注解小结

    注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高 ...

随机推荐

  1. java -- Object类和String类

    Object类 java.lang.Object类是Java语言中的根类,每个类都使用 Object 作为超类, 所有的类都直接或间接继承自 Object 类.所有对象(包括数组)都实现这个类的方法. ...

  2. 随机服务系统模拟—R实现(一)

    排队论--随机服务系统 日常生活中存在大量有形和无形的排队或拥挤现象,如旅客购票排队,市内电话占线等现象.排队论的基本思想是 1909 年丹麦数学家.科学家,工程师 A. K. 埃尔朗在解决自动电话设 ...

  3. Vue2异步更新及nextTick原理

    vue 官网中是这样描述 nextTick 的 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,可以获取更新后的 DOM. 在学习 nextTick 是如何实现之前,我们 ...

  4. 执行计划display_cursor函数

    问题描述:关于oracle查看真实的执行计划,使用select * from table(dbms_xplan.display_cursor(null,null));的方式来获取执行计划 参考文档:h ...

  5. python选出一定数量的随机文件到某个文件夹

    import os import random import shutil def move_file(target_path, save_path, number): file_list = os. ...

  6. php 正则去掉<p>&nbsp;</p> 空格 &nbsp;

    $str=' <p> </p><p> </p><p> </p><p> </p><p>< ...

  7. 基于DotNetCoreNPOI封装特性通用导出excel

    基于DotNetCoreNPOI封装特性通用导出excel 目前根据项目中的要求,支持列名定义,列索引排序,行合并单元格,EXCEL单元格的格式也是随着数据的类型做对应的调整. 效果图: 调用方式 可 ...

  8. AspectCore和MSDI 实现Name注册以及解析对象

    AspectCore 在注册服务这块比较简单,默认是无法根据Name去注册和解析对象,这边做一下这块的扩展 大致原理是根据自定义Name去生成对应的动态类型,然后使用委托或者对象的方式,进行注册 ti ...

  9. 快速上手Linux核心命令(七):Linux系统信息相关命令

    目录 前言 uname 显示系统信息 hostname 显示或设置系统主机名 du 统计磁盘空间使用情况 echo 显示一行文本 watch 监视命令执行情况 stat whereis 显示命令及其相 ...

  10. 使用 shell 脚本自动申请进京证 (六环外) —— debug 过程

    问题现象 用 shell 脚本写了一个自动办理六环外进京证的工具 <使用 shell 脚本自动申请进京证 (六环外)>,然而运行这个脚本总是返回以下错误信息: { "msg&qu ...