long long ago,写过一篇反射机制总结一,后来一直没有续写,今天续写一下反射机制的第二篇总结:
利用反射操作Annotation。因为上一篇已经涵盖了反射的所有入门知识,所以这篇不做过多叙述。如果需要从头学起,
建议看看我的上一篇随笔Java反射机制总结(实例分析)(一)。
上代码:自定义注释类
package
com.sy.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @ interface MyAnnotation {
String p() default " shiyang " ;
String p2();
}
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @ interface MyAnnotation {
String p() default " shiyang " ;
String p2();
}
使用注释的类:
package
com.sy.annotation;
public class MyTest {
@MyAnnotation(p2 = " haha " )
public void output() {
System.out.println( " output something " );
}
}
public class MyTest {
@MyAnnotation(p2 = " haha " )
public void output() {
System.out.println( " output something " );
}
}
反射读取注释的类:
package
com.sy.reflection;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import com.sy.annotation.MyAnnotation;
import com.sy.annotation.MyTest;
public class MyReflection {
public static void main(String[] args) throws Exception{
MyTest myTest = new MyTest();
Class < MyTest > c = MyTest. class ;
Method method = c.getMethod( " output " , new Class[]{});
if (method.isAnnotationPresent(MyAnnotation. class )) {
method.invoke(myTest, new Object[]{});
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation. class );
String p = myAnnotation.p();
String p2 = myAnnotation.p2();
System.out.println(p + " , " + p2);
}
Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation.annotationType().getName());
}
}
}
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import com.sy.annotation.MyAnnotation;
import com.sy.annotation.MyTest;
public class MyReflection {
public static void main(String[] args) throws Exception{
MyTest myTest = new MyTest();
Class < MyTest > c = MyTest. class ;
Method method = c.getMethod( " output " , new Class[]{});
if (method.isAnnotationPresent(MyAnnotation. class )) {
method.invoke(myTest, new Object[]{});
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation. class );
String p = myAnnotation.p();
String p2 = myAnnotation.p2();
System.out.println(p + " , " + p2);
}
Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation.annotationType().getName());
}
}
}
代码很简洁,抛砖引玉。
本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2009/02/17/1392622.html,如需转载请自行联系原作者