自定义注解TestAnnotation

  1. package com.jyusun.origin.study.basic.注解;
  2. import java.lang.annotation.Documented;
  3. import java.lang.annotation.ElementType;
  4. import java.lang.annotation.Retention;
  5. import java.lang.annotation.RetentionPolicy;
  6. import java.lang.annotation.Target;
  7. /**
  8. * 自定义注解
  9. * <p>
  10. * 作用描述:为了解决某些问题,可以采取自定义注解的方式来处理
  11. */
  12. @Documented
  13. @Retention(RetentionPolicy.RUNTIME)
  14. @Target( ElementType.FIELD)
  15. public @interface TestAnnotation {
  16. String value() default "测试注解";
  17. }

注解属性类型

属性类型 备注
String
基本数据类型
Class
Enum
Annotation 注解中可以引用其他注解作为属性类型
以上类型的1维数组

@Target

如果自定义注解不标记 @Target 注解,默认是允许标记在以下描述范围内的任何地方

ElementType 作用域 备注
TYPE 接口、类、枚举、注解
FIELD 字段、枚举的常量
METHOD 方法
PARAMETER 方法参数
CONSTRUCTOR 构造函数
LOCAL_VARIABLE 局部变量
ANNOTATION_TYPE 注解 注解可以用来修饰注解,是注解的注解,称为元注解
PACKAGE

示例:

  1. @Target(ElementType.TYPE)
  2. @Target(ElementType.FIELD)
  3. @Target(ElementType.METHOD)
  4. @Target(ElementType.PARAMETER)
  5. @Target(ElementType.CONSTRUCTOR)
  6. @Target(ElementType.LOCAL_VARIABLE)
  7. @Target(ElementType.ANNOTATION_TYPE)
  8. @Target(ElementType.PACKAGE)

@Retention 注解的保留位置

Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE
按生命周期来划分可分为3类:

  • RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
  • RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
  • RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被丢弃;

    @Documented Javadoc 标注

    在自定义注解的时候可以使用@Documented来进行标注,如果使用@Documented标注了,在生成javadoc的时候就会把@Documented注解给显示出来。