您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
17_注解_解析注解
发布时间:2022-07-09 14:57:30编辑:雪饮阅读()
上次学习了自定义元注解,那么注解到底怎么用?是否与反射有关联。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation1 {
String leiMing();
String fangFaMing();
}
接下来我们在某个入口(调用Class2的类的方法talk方法处)要有用上面这个自定义注解接口Myannotation1.java进行注解实例化(使用)及通过应用注解的目标类来通过注解获取到实例化时候的类名和方法名进而就可以通过反射来调用实例化注解接口时候的类名对应类的对应注解接口实例化时候的方法名的对应方法了。 运行后不出意外就是:
public class Class2 {
public void talk(){
System.out.println("调用了day1.annotation.day1.annotation.Class2的talk方法");
}
}
import java.lang.reflect.Method;
//通过自定义元注解实例化一个对于当前类的注解实例,包含类名和方法名
@MyAnnotation1(leiMing = "day1.annotation.day1.annotation.Class2",fangFaMing = "talk")
public class Class1 {
public static void main(String[] args) throws Exception {
//解析注解(使用注解)
//1:
//首先通过当前类的字节码文件获取到用在当前类字节码文件上的注解实例
//当前类的:
// MyAnnotation1(leiMing = "day1.annotation.day1.annotation.Class2",fangFaMing = "talk")
//这个步骤就是已经实例化了当前类所用的注解接口
//相当于有个当前类所使用的注解接口的子类实现了当前类所使用的注解接口并且实例化了
MyAnnotation1 M11=Class1.class.getAnnotation(MyAnnotation1.class);
String ClassName=M11.leiMing();
String MethodName=M11.fangFaMing();
//2:
//拿到类名和方法名后就可以通过反射来实例化和执行目标类的目标方法
Class Class1=(Class) Class.forName(ClassName);
Method Method1=(Method) Class1.getMethod(MethodName);
Object instance1=Class1.newInstance();
Method1.invoke(instance1);
}
}
关键字词:java,注解,解析
上一篇:16_注解_自定义注解_元注解