1.认识注解
了解注解
注解本质是一个接口,该接口默认继承java.lang.annotation.Annotation接口
public @interface Anno1 { // <- = public @interface Anno1 extends Annotation
/* String name();
String method();*/
}
2.注解的作用
1.编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【override】
2.编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
3.代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
1.编译检查
2.编写文档
3.代码分析 也是最常用的以后ssm三大框会经常用到 (重点讲解)
@Anno1(name = "com.xxxx.practice.demo1.student",method = "cat")
public class Teacher{
}
注解可以代替xml配置文件
那么我们如何来获取注解里面的参数?
先获取带有注解类的class文件
Teacher teacher = new Teacher();
Class<? extends Teacher> aClass = teacher.getClass();
获取到该类的calass文件,它里面有一个方法可以获取该类上面的注解
Teacher teacher = new Teacher();
Class<? extends Teacher> aClass = teacher.getClass();
Anno1 anno1 = aClass.getAnnotation(Anno1.class);
调用了getAnnotation()它返回了一个Anno1的注解对象
其实这里返回的是该注解对应的实例对象,它帮你自动创建好了
既然Anno1是一个实例对象,我们是不是可以调用里面的方法呢,当然可以,注解的本质是一个借口
而且java又帮我们创建好了该接口的实例对象
public @interface Anno1 { // <- = public @interface Anno1 extends Annotation
String name();
String method();
}
直接调方法就好了
Teacher teacher = new Teacher();
Class<? extends Teacher> aClass = teacher.getClass();
Anno1 anno1 = aClass.getAnnotation(Anno1.class);
String name = anno1.name();
String method = anno1.method();
System.out.println(name);
System.out.println(method);
//输出了:
//com.scxh.practice.demo1.student
//cat
有了对象名和方法名我们就可掉方法了,
Teacher teacher = new Teacher();
Class<? extends Teacher> aClass = teacher.getClass();
Anno1 anno1 = aClass.getAnnotation(Anno1.class);
String name = anno1.name();
String method = anno1.method();
System.out.println(name);
System.out.println(method);
Class<?> aClass1 = Class.forName(name);
Constructor<?> constructor = aClass1.getConstructor();
Object o = constructor.newInstance();
Method m = aClass1.getMethod(method);
m.invoke(o);
这就是一个完整的根据就注解获取注解参数,然后用反射调用方法的案列