自定义 Annotation 与使用

基本原理与架构

顶层核心 Annotation 架构与 JVM 层面的处理

  • interface Annotation
  • @Target ,元注解
    • ElementType[] value()
    • 表示适用的范围,它决定了对应标签的可标注位置,可以是多个
  • @Retention,元注解
    • RetentionPolicy value();
    • 表示运行的范围,它决定了对应标签的生效时机,只能是一种
  • @Inherited,元注解
    • 被标注的对象被继承时,同样具有该注解相等效果
  • @Native,元注解
    • 1.8新增,注解一个成员变量,指示这个变量可以被本地代码引用。常常被代码生成工具使用
  • @Repeatable,元注解
    • 1.8新增,表示该定义的注解可以被重复添加至需要的位置

其他 Java 自带的 Annotation

  • @Documented,元注解
    • 是否可以生成 Java 文档,javadoc等工具可以提取这些注解信息
  • @Deprecated
  • @Override
  • @SuppressWarnings
  • @SafeVarargs
  • @FunctionalInterface

使用

反射判断与获取 Annotation

  • java.lang.reflect.AnnotatedElement,反射如何判断与获取 Annotation
    • isAnnotationPresent(Class<? extends Annotation> annotationClass) 方法,表示判断当前位置是否有该注解,一般先做判断再获取
    • getAnnotation 方法,表示获取具体位置配置的 Annotation的对象,从而可以拿到 Annotation上具体配置的信息
  • 各种反射类实现 AnnotatedElement 接口
    • Field extends AccessibleObject implements AnnotatedElement
    • Class<T> implements AnnotatedElement (重写了)
    • Method
    • ... todo

使用方式与一些最佳实践

  • 编译期
    • Lombok,生成字节码的过程中通过 Annotation 增强
  • 运行期
    • 全量扫描,Spring
    • AOP,Spring
    • API调用,自定义 Annotation

参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容