課程
/后端開發
/Java
/全面解析Java注解
課程沒有說明怎么實現的
2016-06-17
源自:全面解析Java注解 2-2
正在回答
你是說為什么注解能做到這個吧。
官方定義的,類似于在代碼中打一個標記,有分編譯時和運行時。
對注解進行解析的代碼在編譯器和運行時中,簡單說就是編譯器和運行時發現類似的@xxx就看看是不是有對應的注解類型,有就對其進行相應的處理。
至于如何去找這個注解標記,那就去看看編譯器和jvm的源碼了,一般學習不用糾結。
就好比定義一個整型變量就是用int,這就是語法!
如果第三方的話,一般是屬于運行時注解,通過反射調用的。即通過反射調用某個方法,加載某個類等等操作的時候,獲取注解信息(反射api有提供方法獲?。缓筢槍ο鄳淖⒔膺M行處理。
花絕世
perpetual_sunrise 提問者
- @Retention【關于注解的生命周期RetentionPolicy】
? ? - .SOURCE,只保留在源文件層面,當.java被編譯成.class的時候,此注解被丟棄
? ? - .CLASS,(默認值)只保留在class文件,不會加載到jvm中。當jvm加載class文件的時候,此注解被丟棄
? ? - .RUNTIME jvm加載被編譯后的class文件后,此注解依然有效
- @Documented【javadoc 文檔相關】
- @Target【指明了此注解用的范圍,是個ElementType】
? ? - TYPE :class,interface(當然也包括annotation 類型)
? ? - FIELD:屬性,包括一些枚舉常量
? ? - METHOD:方法
? ? - PARAMETER:方法內參數
? ? - CONSTRUSTOR:構造方法
? ? - LOCAL_VARIABLE:局部變量
? ? - ANNOTATION_TYPE:注解類型聲明
? ? - PACKAGE:包
? ? - TYPE_PARAMETER:參數類型
? ? - TYPE_USE
- @Inherited
? ? - 在超類A的注解test被@Inherited注解后,該注解(test)被A'注解(@test),A'的子類就繼承了超類A的注解。(前提是子類沒有被任何注解應用)
- @Repeatable【多個屬性值的注解】
? ? - @Repeatable后面括號的類相當于一個容器注解
舉報
注解Java中的常用技能,通過實戰演示注解在實際項目中的應用
4 回答定義注解時的要求,為什么這么要求?語法規定的?還是有什么原理的考量?
1 回答注解在什么時候用的
2 回答這就是mybatis的原理嗎
2 回答元注解的解析
2 回答為什么沒有自動加注解?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-06-18
你是說為什么注解能做到這個吧。
官方定義的,類似于在代碼中打一個標記,有分編譯時和運行時。
對注解進行解析的代碼在編譯器和運行時中,簡單說就是編譯器和運行時發現類似的@xxx就看看是不是有對應的注解類型,有就對其進行相應的處理。
至于如何去找這個注解標記,那就去看看編譯器和jvm的源碼了,一般學習不用糾結。
就好比定義一個整型變量就是用int,這就是語法!
如果第三方的話,一般是屬于運行時注解,通過反射調用的。即通過反射調用某個方法,加載某個類等等操作的時候,獲取注解信息(反射api有提供方法獲?。缓筢槍ο鄳淖⒔膺M行處理。
2019-12-09
- @Retention【關于注解的生命周期RetentionPolicy】
? ? - .SOURCE,只保留在源文件層面,當.java被編譯成.class的時候,此注解被丟棄
? ? - .CLASS,(默認值)只保留在class文件,不會加載到jvm中。當jvm加載class文件的時候,此注解被丟棄
? ? - .RUNTIME jvm加載被編譯后的class文件后,此注解依然有效
- @Documented【javadoc 文檔相關】
- @Target【指明了此注解用的范圍,是個ElementType】
? ? - TYPE :class,interface(當然也包括annotation 類型)
? ? - FIELD:屬性,包括一些枚舉常量
? ? - METHOD:方法
? ? - PARAMETER:方法內參數
? ? - CONSTRUSTOR:構造方法
? ? - LOCAL_VARIABLE:局部變量
? ? - ANNOTATION_TYPE:注解類型聲明
? ? - PACKAGE:包
? ? - TYPE_PARAMETER:參數類型
? ? - TYPE_USE
- @Inherited
? ? - 在超類A的注解test被@Inherited注解后,該注解(test)被A'注解(@test),A'的子類就繼承了超類A的注解。(前提是子類沒有被任何注解應用)
- @Repeatable【多個屬性值的注解】
? ? - @Repeatable后面括號的類相當于一個容器注解