Java笔记 七注解
注解
什么是注解?
Annotation
(注解)是Java5 开始引入的新特性,提供某些信息供程序在编译或者运行时使用
。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。
主要作用
- 生成文档,通过代码里标识的元数据生成javadoc文档。
- 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
- 编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
- 运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
著作权归@pdai所有
原文链接:https://pdai.tech/md/java/basic/java-basic-x-annotation.html
分类
- Java自带的标准注解,用注解标明后编译器就会进行检查。
- 元注解:用于定义注解的注解。例如,@Target用于标明注解使用的范围,@Inherited用于标明注解可继承,@Documented用于标明是否生成javadoc文档。
- 自定义注解。
元注解
- @Target 注解的使用范围
- @Retention 保留时间的范围
public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息
}
------
著作权归@pdai所有
原文链接:https://pdai.tech/md/java/basic/java-basic-x-annotation.html
- @Documented
- @Inherited 某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。
- @Repeatable
- @Native
@Repeatable
允许在同一申明类型(类,属性,或方法)的多次使用同一个注解
@Repeatable(Authorities.class)//@Repeatable,指向存储注解Authorities
public @interface Authority {
String role();
}
public @interface Authorities {
Authority[] value();
}
public class RepeatAnnotationUseNewVersion {
@Authority(role="Admin")
@Authority(role="Manager")
public void doSomeThing(){ }
}
------
著作权归@pdai所有
原文链接:https://pdai.tech/md/java/java8/java8-anno-repeat.html
注解的解析方法
- 编译期直接扫描 eg.
某个方法使用@Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。
- 运行期通过反射处理
框架中自带的注解都是通过反射处理。
java.lang.reflect.AnnotatedElement 提供获取主键中内容的方法。只有@retention中传入参数为RUNTIME的注解才会被虚拟机读取。
反射获取注解内容的相关接口
boolean isAnnotationPresent(Class<?extends Annotation> annotationClass);
<T extends Annotation> T getAnnotation(Class<T> annotationClass);
Annotation[] getAnnotations()
<T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass)
<T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass)
Annotation[] getDeclaredAnnotations()
Java 8提高的新注解
- @Repeatable
- ElementType.TYPE_USE
自定义注解 @interface + 元注解
注解不支持继承