Java注解

Java注解平时使用的较少,不过可以看到,很多三方库中大量的使用Java注解进行代码的解耦。这里总结下Java注解的用法,以后在代码中还是要多多使用,增加熟练度。

元注解(meta-annotation)

注解的注解,可以用来注解普通注解,常用于自定义注解

@Target

这个元注解用于声明注解的适用范围,使用方法为@Target(ElementType.TYPE)
type共有七种:

  1. ElemenetType.CONSTRUCTOR 构造器声明
  2. ElemenetType.FIELD 域声明(包括 enum 实例)
  3. ElemenetType.LOCAL_VARIABLE 局部变量声明
  4. ElemenetType.METHOD 方法声明
  5. ElemenetType.PACKAGE 包声明
  6. ElemenetType.PARAMETER 参数声明
  7. ElemenetType.TYPE 类,接口(包括注解类型)或enum声明

@Retention

这个注解用来描述注解保留的时间,使用方法为@Retention(RetentionPolicy.RUNTIME)

  1. SOURCE: Annotation只保留在原代码中,当编译器编译的时候就会抛弃它。(即源文件保留)
  2. CLASS: 编译器将把Annotation记录在Class文件中,不过当java程序执行的时候,JVM将抛弃它。(即class保留)
  3. RUNTIME: 在Retationpolicy.CLASS的基础上,JVM执行的时候也不会抛弃它,所以我们一般在程序中可以通过反射来获得这个注解,然后进行处理。

@Document

Document标记这个注解应该被javadoc工具记录。默认情况下,Javadoc是不包括注解的。

@Inherited

Inherited译为可继承的,如果一个使用了@Inherited 修饰的 annotation类型 被用于一个 class,则这个 annotation 将被用于该class的子类。

自定义注解

注解不能继承或者实现其它注解或者接口.
@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法名称为参数名称,返回值类型就是参数类型.可使用default指定参数的默认值.

注解可以定义多个方法,传入多个参数时可以这样,例如:

@Field(value = “tags”,encoded = false)

@Retention(SOURCE)

源码注解(RetentionPolicy.SOURCE)的生命周期只存在Java源文件这一阶段,是3种生命周期中最短的注解。基本无需刻意去做处理,如@InDef、@StringDef等

@Retention(Class)

使用APT去处理注解

@Retention(RunTime)

生命周期最长通常可以使用反射,也可以使用自定义注解器

文章目录
  1. 1. 元注解(meta-annotation)
    1. 1.1. @Target
    2. 1.2. @Retention
    3. 1.3. @Document
    4. 1.4. @Inherited
  2. 2. 自定义注解
    1. 2.0.1. @Retention(SOURCE)
    2. 2.0.2. @Retention(Class)
    3. 2.0.3. @Retention(RunTime)
|