1:注解从jdk1.5之后支持
2: jdk中预定义的一些注解
*@Override (检查被该注解标注的方法是否继承于父类) @Deprecated(标注的内容表示已经过时) @SuppressWarnings(压制警告))
3:自定义注解
(本质相当于一个接口,接口能定义什么 注解就可以定义什么)
public @interface MyAnotation { //javac把源文件先编译成为class 文件 在通过javap命令反编译就会发现注解的 本质是 public interface Annotaticn extends Annotation{} 这就可以说接口中能定义什么 注解就可以定义什么
属性的返回值类型 //javadoc可以编译成Document文档
*基本数据类型
*String
*枚举 注解 以上数据的数组类型
例如:int show1();
}
4:元注解
用于描述注解的注解
//自定义注解 @Target(value = {ElementType.TYPE,ElementType.FIELD) //定义作用范围 Type是只能作用于类上 FIELD 成员变量上 @Retention(RetentionPolicy.RUNTIME) // SOURCE CLASS RUNTIME //@Documented public @interface MyAnotation { //本质是 public interface Annotaticn extends Annotation }
5注解替代配置文件(框架注解的简易实现原理)
package cn; import java.lang.reflect.Method; @Pro(className = "cn.refect.Person",methodName = "eat") //注解替代了配置文件 相当于直接配置到了类上! public class ReDemo { public static void main(String[] args) { //用注解代替配置文件 try { Class<ReDemo> clazz = ReDemo.class; //获取一个注解对象 Pro po = clazz.getAnnotation(Pro.class); String className = po.className(); String methodName = po.methodName(); System.out.println(className); System.out.println(methodName); //反射执行 Object o = clazz.newInstance(); Method method = clazz.getMethod(methodName); method.invoke(o); } catch (Exception e) { e.printStackTrace(); } } }
//自定义的注解
package cn; 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 Pro { String className(); String methodName(); }
原文:https://www.cnblogs.com/gaoSJ/p/12877521.html