@Repeatable

@Repeatable注解是用来标注一个注解在同一个地方可重复使用的一个注解,比如说你定义了一个注解,如果你的注解没有标记@Repeatable这个JDK自带的注解,那么你这个注解在引用的地方就只能使用一次。
@Repeatable_第1张图片
这里@ImportResource(value = “”)注解里面没有设置添加@Repeatable属性,所有引入的多次的时候就会报错。

Repeatable注解的定义

java8以后支持在同一个地方(某个方法或者某个类等)加上相同的注解,前提是这个注解要使用元注解@Repeatable,但是在用之前必须知道如何定义一个自定义注解。
自定义注解示例:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Repeatable(ActionUnlockChecks.class)
public @interface ActionUnlockCheck {
    int actionType();
}

@Repeatable的属性value的类型是Class类型,这里创建了另一个自定义注解,后面称之为父注解,之前的称之为子注解,示例代码如下:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface ActionUnlockChecks {
    ActionUnlockCheck[]  value();
}

父注解必须有以下特征:
1:作用域必须大于等于子注解
2:父注解的周期要比子注解的周期要小或相同(注意:SOURCE(源码) < CLASS (字节码) < RUNTIME(运行))
3:父注解的value的类型是子注解类型的数组
原理:
多个子注解其实会被转换成一个父注解。

你可能感兴趣的:(注解,java)