自定義 Annotation 與使用

基本原理與架構(gòu)

頂層核心 Annotation 架構(gòu)與 JVM 層面的處理

  • interface Annotation
  • @Target ,元注解
    • ElementType[] value()
    • 表示適用的范圍,它決定了對應(yīng)標(biāo)簽的可標(biāo)注位置,可以是多個
  • @Retention,元注解
    • RetentionPolicy value();
    • 表示運行的范圍,它決定了對應(yīng)標(biāo)簽的生效時機(jī),只能是一種
  • @Inherited,元注解
    • 被標(biāo)注的對象被繼承時,同樣具有該注解相等效果
  • @Native,元注解
    • 1.8新增,注解一個成員變量,指示這個變量可以被本地代碼引用。常常被代碼生成工具使用
  • @Repeatable,元注解
    • 1.8新增,表示該定義的注解可以被重復(fù)添加至需要的位置

其他 Java 自帶的 Annotation

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

使用

反射判斷與獲取 Annotation

  • java.lang.reflect.AnnotatedElement,反射如何判斷與獲取 Annotation
    • isAnnotationPresent(Class<? extends Annotation> annotationClass) 方法,表示判斷當(dāng)前位置是否有該注解,一般先做判斷再獲取
    • getAnnotation 方法,表示獲取具體位置配置的 Annotation的對象,從而可以拿到 Annotation上具體配置的信息
  • 各種反射類實現(xiàn) AnnotatedElement 接口
    • Field extends AccessibleObject implements AnnotatedElement
    • Class<T> implements AnnotatedElement (重寫了)
    • Method
    • ... todo

使用方式與一些最佳實踐

  • 編譯期
    • Lombok,生成字節(jié)碼的過程中通過 Annotation 增強(qiáng)
  • 運行期
    • 全量掃描,Spring
    • AOP,Spring
    • API調(diào)用,自定義 Annotation

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容