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