TestAnno.java 1.5 KB

123456789101112131415161718192021222324252627282930
  1. package com.sf.anno;
  2. import java.lang.annotation.*;
  3. // 声明这是一个注解
  4. // 元注解 是声明注解用法的注解
  5. // Target 目标 指定注解使用的位置 ElementType是枚举类型
  6. // 如果是 ElementType.TYPE 那么意思是注解放在类上
  7. // 如果是 ElementType.FIELD 那么意思是注解放在字段上
  8. // 如果是 ElementType.METHOD 那么意思是注解放在方法上
  9. // 如果是 ElementType.PARAMETER 那么意思是注解放在方法参数上
  10. // 如果是 ElementType.CONSTRUCTOR 那么意思是注解放在构造器上
  11. // Retention 保留期 注解的存活时间
  12. // RetentionPolicy是提供了几种使用保留期的方式
  13. // 如果是RetentionPolicy.SOURCE 只在源代码阶段保留 .java源代码 -> .class字节码 -> jvm识别为机器语言
  14. // 如果是RetentionPolicy.CLASS 只在字节码阶段保留 .java源代码 -> .class字节码 -> jvm识别为机器语言
  15. // 如果是RetentionPolicy.RUNTIME 在代码运行阶段也就是JVM中保留 .java源代码 -> .class字节码 -> jvm识别为机器语言
  16. // Inherited 如果注解被此注解标注 而子类没有被其他注解标注 那么子类会继承父类的注解
  17. @Inherited
  18. @Target({ElementType.TYPE})
  19. @Retention(RetentionPolicy.RUNTIME)
  20. public @interface TestAnno {
  21. // 注解只有成员变量 没有方法
  22. // 以没有入参的方法来声明变量
  23. int id() default 0;
  24. // 可以声明参数的默认值
  25. String msg() default "";
  26. }