注释是给人看的,注解是给程序或者虚拟机看的。
首先介绍元注解 【注解的注解】
类型 | 词意 | 说明 |
---|---|---|
@Retention | 保留 | 定义注解的保留策略 |
@Target | 目标 | 用于设定注解使用范围 |
@Document | 文档 | 说明该注解将被包含在javadoc中,用于被javadoc记录,生成api文档 |
@Inherited | 遗传 | 通过对注解上使用元注解Inherited声明出的注解,在使用时用在类上,可以被子类所继承,对属性或方法无效。 |
@Retention保留策略有以下几种:
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target通过ElementType来指定注解可使用范围的枚举集合
取值 | 范围 |
---|---|
METHOD | 可用于方法上 |
TYPE | 可用于类或者接口上 |
ANNOTATION_TYPE | 可用于注解类型上(被@interface修饰的类型) |
CONSTRUCTOR | 可用于构造方法上 |
FIELD | 可用于域上 |
LOCAL_VARIABLE | 可用于局部变量上 |
PACKAGE | 用于记录java文件的package信息 |
PARAMETER | 可用于参数上 |
例子:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE.METHOD)
@Documented
public @interface MyAnnotation {
String[] value() default {};
String[] roles() default {};
}
应用:
private String name;
@MyAnnotation(roles = {RoleConstant.SYSTEM_ADMIN,RoleConstant.MEMBER})
public void excute(){
System.out.println("method");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}