什么是注解?
Annotation(注解)是插入代码中的元数据,在JDK5.0及以后版本引入。它主要的作用有以下四方面:
生成文档,通过代码里标识的元数据生成javadoc文档。
编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
元注解:
java.lang.annotation提供了四种元注解,专门注解其他的注解:
@Documented –注解是否将包含在JavaDoc中
@Retention –什么时候使用该注解
@Target –注解用于什么地方
@Inherited – 是否允许子类继承该注解
@Target:表示该注解可以用于什么地方,可能的ElementType参数有:
CONSTRUCTOR:构造器的声明
FIELD:域声明(包括enum实例)
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明
@Retention表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息
自定义注解
首先需要创建一个注解类
package com.example.consumer.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**定义注解
*
* */
@Target({ElementType.TYPE})
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Audit {
String operation() default "";
String operator() default "";
}
获取注解上的属性
import java.lang.reflect.Method;
@Audit(operation = "Main", operator = "Main")
public class Main {
@Audit(operation = "test", operator = "test")
public static void test() {
}
public static void main(String args[]) {
for (Method m : Main.class.getDeclaredMethods()) {
//获得注解的对象
Audit audit = m.getAnnotation(Audit.class);
if (audit != null) {
System.out.println("Found annotation:" + audit.operation() + " "
+ audit.operator());
}
}
Audit audit = Main.class.getDeclaredAnnotation(Audit.class);
if (audit != null) {
System.out.println("Found annotation:" + audit.operation() + " "
+ audit.operator());
}
}
}
网友评论