Java注解

注解是JDK 1.5中引入的,可以提供代码的额外信息。

元注解

元注解的作用就是负责注解其他注解,Java定义了4个标准的元注解类型:

  1. @Target
  2. @Retention
  3. @Documented
  4. @Inherited

@Target

@Target说明了注解所修饰的对象范围,ElementType取值:

  1. CONSTRUCTOR: 用于描述构造器;
  2. FIELD: 用于描述域;
  3. LOCAL_VARIABLE: 用于描述局部变量;
  4. METHOD: 用于描述方法;
  5. PACKAGE: 用于描述包;
  6. PARAMETER: 用于描述参数;
  7. TYPE: 用于描述类、接口(包括注解类型)或enum声明;
  8. ANNOTATION_TYPE: 用于注解。

@Retention

@Retention定义了该注解被保留的时间长短,用于描述注解的生命周期,RetentionPolicy取值:

  1. SOURCE: 在源文件中有效(即源代码中保留,被编译器丢弃);
  2. CLASS: 在class文件中有效;
  3. RUNTIME: 在运行时有效(注解处理器可以通过反射获取注解的属性值)。

@Documented

@Documented用于描述注解可以文档化JavaDoc,是一个标记注解,没有成员。

@Inherited

@Inherited是一个标记注解,表示被注解的类,其子类会自动继承该注解。

自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。

@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数
方法的名称就是参数的名称,注解的方法修饰符只能是public或默认;返回值类型就是参数的类型,可以通过default来声明参数的默认值。

注解参数的可支持数据类型:

  1. 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
  2. String类型
  3. Class类型
  4. enum类型
  5. Annotation类型
  6. 以上所有类型的数组
Controller
1
2
3
4
5
6
7
8
9
10
11
12
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 控制器注解
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
}
Aspect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.lang.annotation.*;
/**
* 切面注解
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Aspect {
/**
* 注解
*/
Class<? extends Annotation> value();
}