Java反射机制总结(实例分析)(二)
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());
}
}
}
代码很简洁,抛砖引玉。
作者:Steven(Steven's Think out)
出处:http://shiyangxt.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。