@Pro注解
package annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Pro {
String className();
String methodName();
}
Person类
package Object;
public class Person {
public void sleep(){
System.out.println("睡觉觉");
}
}
Demo02_reflectAnnoTest主方法
package annotation;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
@Pro(className="Object.Person",methodName="sleep")
public class Demo02_reflectAnnoTest {
public static void main(String[] args) throws Exception{
//1.解析注释
Class refAnn = Demo02_reflectAnnoTest.class;
//2.获取注解对象
Pro pro = (Pro) refAnn.getAnnotation(Pro.class);
//3.调用注解对象的抽象方法,获取返回值
String className = pro.className();
String methodName = pro.methodName();
//4.使用反射调用方法
Class cls = Class.forName(className);
Method method = cls.getMethod(methodName);
Object obj = cls.newInstance();
method.invoke(obj);
}
}
运行截图