import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; /** * create gl **/ @Repeatable(MyAnnotations.class) // 定义重复注解,指定容器类 @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER}) @Retention(RetentionPolicy.RUNTIME) // 生命周期 public @interface MyAnnotation { String value() default "666"; }
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; /** * create gl **/ @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotations { MyAnnotation[] value(); }
mport java.lang.reflect.Method; /** * create gl * 重复注解 与 类型注解 **/ public class TestAnno { private @NotNull User user; @MyAnnotation("hello") @MyAnnotation("world") public void show(@MyAnnotation("123") String str){ } public static void main(String[] args) throws NoSuchMethodException { Class<TestAnno> annoClass = TestAnno.class; Method show = annoClass.getMethod("show"); MyAnnotation[] annotationsByType = show.getAnnotationsByType(MyAnnotation.class); for (MyAnnotation mat:annotationsByType) { System.out.println(mat.value()); } } }