在Java中见过Annotation,Servlet也见到过Annotation,它最大的好处:节约了代码代码检查的时间,节约了配置文件的编写.
尤其是在Servlet配置的过程里面,利用Annotation可以解决配置文件过多的问题.
取得配置的Annotation
如果要想操作Annotation,那么首先必须清除去和取得配置的Annotation.要想取得所有在类中或方法上配置的Annotation可以在Class类中找到如下的方法:
取得类上配置的全部Annotation:
public Annotation[] getAnnotations()取得一个Annotation:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
范例:取得类上配置的Annotation
import java.io.Serializable; @SuppressWarnings("serial") @Deprecated public class Emp implements Serializable{ }
此时的确是两个Annitation配置在了Emp类上面
范例:通过Class类取得配置的Annotation
import java.io.Serializable; @SuppressWarnings("serial") @Deprecated public class Emp implements Serializable{ }
import java.lang.annotation.Annotation; public class Dome7 { public static void main(String[] args) throws ClassNotFoundException { Class<?> cls=Class.forName("cn.zwb.dome1.Emp"); Annotation an[]= cls.getAnnotations(); for (int i = 0; i < an.length; i++) { System.out.println(an[i]); } } }
结果:@java.lang.Deprecated()
这个程序只是针对于类上定义Annotation操作,而实际上方法上才会经常出现Annotation,而在
"java.lang.reflect.AccessibleObject"类(Constructor.Method.Field三个类的父类)中定义了取得Annotation的操作方法;
范例:取得方法上定义的Annotation
import java.io.Serializable; @SuppressWarnings("serial") public class Emp implements Serializable{ @Deprecated @Override public String toString() { // TODO 自动生成的方法存根 return "hello"; } }
import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class Dome7 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException { Class<?> cls=Class.forName("cn.zwb.dome1.Emp"); Method met=cls.getMethod("toString"); Annotation an[]= met.getAnnotations(); for (int i = 0; i < an.length; i++) { System.out.println(an[i]); } } }
结果:@java.lang.Deprecated()
有些Annotation无法取得.