Java注解
注解的底层原理:
注解的本质是一种继承自Annotation类的特殊接口,也被称为声明式接口,编译后会转换为一个继承自Anotation的接口,并生成相应的字节码文件。
注解的具体实现类是Java运行时生成的动态代理对象(接口本身并不能生成实例对象和动态赋值,所以需要依靠动态代理对象实例化)。
// 定义一个简单的注解
public @interface MyAnnotation {String value();
}
注解的作用范围:
注解可分为三种类型:使用@Rentention元注解设定保留策略
源码级别注解:仅在源码中存在,编译后不保留
类文件级别注解:保留在.class文件中,但运行时不可见
运行时注解:保留在.class文件中,且可通过反射运行时访问
注解的使用:
注解作为声明式接口,常与反射一起使用。注解的解析依赖于反射机制。
反射机制的核心类是AnnotatedElement,它同时也是所有可被注解的元素(Class、Method、Field)等类的父接口。
Java注解的作用域(Scope)指定注解可以在哪些元素上应用,主要分为三种:类级别作用域、方法级别作用域、字段级别作用域。