一个Annotation如果要是想让其变得有意义,则必须结合反射机制取得Annotation中
设置的全部内容;
package com.simple.demo;
public class SimpleBeanOne{
@SuppressWarnings("unchecked")
@Deprecated
@Override
public String toString(){
return "hello girls";
}
}
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class ReflectDemo{
public static void main(String args[]) throws Exception{
Class c=null;
c=Class.forName("com.simple.demo.SimpleBeanOne");
Method toM=c.getMethod("toString");
Annotation an[]=toM.getAnnotations();
for(Annotation a:an){
System.out.println(a);
}
}
}
以上得到的结果是:@java.lang.Deprecated()
package com.simple.demo;
public class SimpleBeanTwo{
@SuppressWarnings("unchecked")
@Deprecated
@Override
@MyDefaultAnnotationReflect(key="yuj",value="lid")
public String toString(){
return "hello boys";
}
}
package com.simple.demo;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyDefaultAnnotationReflect{
public String key() default "LID";
public String value() default "YUJ";
}
package com.simple.demo;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class ReflectDemo{
public static void main(String args[]) throws Exception{
Class c=null;
c=Class.forName("com.simple.demo.SimpleBeanTwo");
Method toM=c.getMethod("toString");
if(toM.isAnnotationPresent(MyDefaultAnnotationReflect.class)){
//判断该方法上是否存在Annotation
MyDefaultAnnotationReflect mda=null;
mda=toM.getAnnotation(MyDefaultAnnotationReflect.class);
String key=mda.key();
String value=mda.value();
System.out.println("key="+key);
System.out.println("value="+value);
}
}
}
总结:
1、Annotation 在实际的开发中,不管如何使用,其最终肯定是结合反射机制,也就是说
可以通过Annotation设置一些内容到一个方法上去,已完成特定的功能;
2、日后在学习EJB 3.0中可以发现更多Annotation应用;