标签:
1 java.lang.reflect.AnnotatedElement接口: 2 3 public Annotation[] getAnnotation(Class annotationType); 4 5 public Annotation[] getDeclaredAnnotations(); 6 7 public Boolean isAnnotationPresent(Class annotationType);
Class 、Constructor、Field、Method、Package等类别,都实现了AnnotatedElement接口,既然Class 、Constructor、Field、Method、Package等类别,都实现了AnnotatedElement接口,显然它们都可以去调用AnnotatedElement里面的方法,以上各方法是定义在这个接口中的,定义Annotation时必须设定RententionPolicy为RUNTIME,也就是可以在VM中读取Annotation信息
1、public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
这句代码表示:annotationClass指定的注解,如果存在于方法的上面,就返回一个true,这个方法主要是用来判断某个方法上面是否存在注解。
2、public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
会返回一个Annotation这样一个对象,参数里边儿是一个具体的Annotation Class对象,如果这样一个Annotation存在的话,才会返回这个Annotation。否则返回一个空值
3、Class<? extends Annotation> annotationType()
返回注解所对应的Class对象。
@Target
使用java.lang.annotation.Target可以定义其使用之时机,就是限定可以在什么地方可以使用注解:如方法、类、成员属性、变量,在定义时要指定java.lang.annotation.ElementType的枚举值之一,以此来表示这个注解可以修饰哪些目标。
package java.lang.annotation
public Enum ElementType{
TYPE,//适用class,interface,enum
FIELD,//适用field
METHOD,//适用method
PARAMETER,//适用method之上的parater
CONSTTRUCTOR,//适用constructor
LOCAL_VARIABLE,//适用局部变量
ANNOTATION_TYPE,//适用annotation型态
PACKAGE//适用package
}
1 package com.javase.annotation; 2 import java.lang.annotation.ElementType; 3 import java.lang.annotation.Target; 4 /** 5 * 自定义一个注解,这个注解只能修饰方法 6 * @author x_xiongjie 7 * 8 */ 9 @Target(ElementType.METHOD) 10 public @interface MyTarget { 11 String value(); 12 } 13 14 package com.javase.annotation; 15 16 public class MyTargetTest { 17 @MyTarget(value="zhangsan") 18 public void doSomething(){ 19 System.out.println("hello world"); 20 } 21 }
在制作JavaDoc文件的同时,如果想要将Annotation的内容也加入到API文件中,需要使用java.lang.annotation.Documented,则在在生成java doc的时候,将注解信息也生成到java doc中。
1 package com.javase.annotation; 2 import java.lang.annotation.Documented; 3 4 @Documented 5 public @interface DocumentedAnnotation { 6 String hello(); 7 } 8 package com.javase.annotation; 9 10 public class DocumentedTest { 11 @DocumentedAnnotation(hello="welcome") 12 public void method(){ 13 System.out.println("helloworld"); 14 } 15 }
在定义Annotation时加上java.lang.annotation.Inherited形态的Annotation,Inherited表示一个注解信息是否可以被自动继承下来,如果在注解中加上Inherited注解,就会由父类中被子类继承下来。
1、要知道注解的本源是什么,如何去定义注解。
2、如何使用反射的方式去解析注解的信息,并且去解析注解下面所修饰的类、方法。根据注解是否存在注解的值到底是什么,来去调用对应的方法,或者处理对应的类。这个是很重要的,将RetentionPolicy设置为RUNTIME就可以得到。
标签:
原文地址:http://www.cnblogs.com/sunfie/p/4351458.html