你的分享就是我们的动力 ---﹥

【Spring】六、自定义注解,元注解 @interface @Override @Deprecated @SuppressWarnings @Retention @Target @Documented @Inherited

【Spring】6、自定义注解,元注解 @interface @Override @Deprecated @SuppressWarnings @Retention @Target @Documented @Inherited

一、@interface

 Java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。

 

二、@Override,@Deprecated,@SuppressWarnings

注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后,
JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记,就去干相应的事。

      [email protected],当我们想重写一个方法时,[email protected],当我们方法
的名字出错时,编译器就会报错,如图:

【Spring】六、自定义注解,元注解 @interface  @Override  @Deprecated  @SuppressWarnings  @Retention  @Target  @Documented  @Inherited
       [email protected],用来表示某个类的属性或方法已经过时,不想别人再用时,在属性和方法
[email protected],如图:

【Spring】六、自定义注解,元注解 @interface  @Override  @Deprecated  @SuppressWarnings  @Retention  @Target  @Documented  @Inherited

 

  [email protected],比如在没有用泛型或是方法已经过时的时候,
 如图:

  【Spring】六、自定义注解,元注解 @interface  @Override  @Deprecated  @SuppressWarnings  @Retention  @Target  @Documented  @Inherited

[email protected]

[email protected],是注解的注解,称为元注解。
Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE
[email protected](RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
[email protected](RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
[email protected](RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

[email protected]

[email protected],它有一个属性ElementType也是枚举类型,
值为:ANNOTATION_TYPE CONSTRUCTOR FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE
[email protected](ElementType.METHOD) 修饰的注解表示该注解只能用来修饰在方法上

五、Documented 注解

Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中. 

六、Inherited 注解

这是一个稍微复杂的注解类型. 它指明被注解的类会自动继承. 更具体地说,如果定义注解时使用了 @Inherited 标记,然后用定义的注解来标注另一个父类, 父类又有一个子类(subclass),则父类的所有属性将被继承到它的子类中.