最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 什么是注解及注解原理詳細(xì)介紹

 更新時(shí)間:2016年12月31日 10:28:09   投稿:lqh  
這篇文章主要介紹了Java 注解的原理實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

Java 注解的原理

java : 注解使用,http://m.fzitv.net/article/101747.htm

什么是注解

注解也叫元數(shù)據(jù),例如我們常見的@Override和@Deprecated,注解是JDK1.5版本開始引入的一個(gè)特性,用于對(duì)代碼進(jìn)行說(shuō)明,可以對(duì)包、類、接口、字段、方法參數(shù)、局部變量等進(jìn)行注解。它主要的作用有以下四方面:

  • 生成文檔,通過代碼里標(biāo)識(shí)的元數(shù)據(jù)生成javadoc文檔。
  • 編譯檢查,通過代碼里標(biāo)識(shí)的元數(shù)據(jù)讓編譯器在編譯期間進(jìn)行檢查驗(yàn)證。
  • 編譯時(shí)動(dòng)態(tài)處理,編譯時(shí)通過代碼里標(biāo)識(shí)的元數(shù)據(jù)動(dòng)態(tài)處理,例如動(dòng)態(tài)生成代碼。
  • 運(yùn)行時(shí)動(dòng)態(tài)處理,運(yùn)行時(shí)通過代碼里標(biāo)識(shí)的元數(shù)據(jù)動(dòng)態(tài)處理,例如使用反射注入實(shí)例。

一般注解可以分為三類:

一類是Java自帶的標(biāo)準(zhǔn)注解,包括@Override、@Deprecated和@SuppressWarnings,分別用于標(biāo)明重寫某個(gè)方法、標(biāo)明某個(gè)類或方法過時(shí)、標(biāo)明要忽略的警告,用這些注解標(biāo)明后編譯器就會(huì)進(jìn)行檢查。

一類為元注解,元注解是用于定義注解的注解,包括@Retention、@Target、@Inherited、@Documented,@Retention用于標(biāo)明注解被保留的階段,@Target用于標(biāo)明注解使用的范圍,@Inherited用于標(biāo)明注解可繼承,@Documented用于標(biāo)明是否生成javadoc文檔。

一類為自定義注解,可以根據(jù)自己的需求定義注解,并可用元注解對(duì)自定義注解進(jìn)行注解。

注解原理:

看看在Java的大體系下面是如何對(duì)注解的支持的。還是回到上面自定義注解的例子,對(duì)于注解Test,如下,如果對(duì)AnnotationTest類進(jìn)行注解,則運(yùn)行時(shí)可以通過AnnotationTest.class.getAnnotation(Test.class)獲取注解聲明的值,從上面的句子就可以看出,它是從class結(jié)構(gòu)中獲取出Test注解的,所以肯定是在某個(gè)時(shí)候注解被加入到class結(jié)構(gòu)中去了。

@Test("test") 
public class AnnotationTest { 
public void test(){ 
} 
}

從java源碼到class字節(jié)碼是由編譯器完成的,編譯器會(huì)對(duì)java源碼進(jìn)行解析并生成class文件,而注解也是在編譯時(shí)由編譯器進(jìn)行處理,編譯器會(huì)對(duì)注解符號(hào)處理并附加到class結(jié)構(gòu)中,根據(jù)jvm規(guī)范,class文件結(jié)構(gòu)是嚴(yán)格有序的格式,唯一可以附加信息到class結(jié)構(gòu)中的方式就是保存到class結(jié)構(gòu)的attributes屬性中。我們知道對(duì)于類、字段、方法,在class結(jié)構(gòu)中都有自己特定的表結(jié)構(gòu),而且各自都有自己的屬性,而對(duì)于注解,作用的范圍也可以不同,可以作用在類上,也可以作用在字段或方法上,這時(shí)編譯器會(huì)對(duì)應(yīng)將注解信息存放到類、字段、方法自己的屬性上。

在我們的AnnotationTest類被編譯后,在對(duì)應(yīng)的AnnotationTest.class文件中會(huì)包含一個(gè)RuntimeVisibleAnnotations屬性,由于這個(gè)注解是作用在類上,所以此屬性被添加到類的屬性集上。即Test注解的鍵值對(duì)value=test會(huì)被記錄起來(lái)。而當(dāng)JVM加載AnnotationTest.class文件字節(jié)碼時(shí),就會(huì)將RuntimeVisibleAnnotations屬性值保存到AnnotationTest的Class對(duì)象中,于是就可以通過AnnotationTest.class.getAnnotation(Test.class)獲取到Test注解對(duì)象,進(jìn)而再通過Test注解對(duì)象獲取到Test里面的屬性值。

這里可能會(huì)有疑問,Test注解對(duì)象是什么?其實(shí)注解被編譯后的本質(zhì)就是一個(gè)繼承Annotation接口的接口,所以@Test其實(shí)就是“public interface Test extends Annotation”,當(dāng)我們通過AnnotationTest.class.getAnnotation(Test.class)調(diào)用時(shí),JDK會(huì)通過動(dòng)態(tài)代理生成一個(gè)實(shí)現(xiàn)了Test接口的對(duì)象,并把將RuntimeVisibleAnnotations屬性值設(shè)置進(jìn)此對(duì)象中,此對(duì)象即為Test注解對(duì)象,通過它的value()方法就可以獲取到注解值。

Java注解實(shí)現(xiàn)機(jī)制的整個(gè)過程如上面所示,它的實(shí)現(xiàn)需要編譯器和JVM一起配合。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 基于jfreechart生成曲線、柱狀等圖片并展示到JSP

    基于jfreechart生成曲線、柱狀等圖片并展示到JSP

    這篇文章主要介紹了基于jfreechart生成曲線、柱狀等圖片并展示到JSP,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 詳解java基礎(chǔ)--提示對(duì)話框的使用

    詳解java基礎(chǔ)--提示對(duì)話框的使用

    這篇文章主要介紹了java基礎(chǔ)--提示對(duì)話框的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • idea亂碼修改bin目錄下的idea.exe.vmoptions無(wú)效問題

    idea亂碼修改bin目錄下的idea.exe.vmoptions無(wú)效問題

    這篇文章主要介紹了idea亂碼修改bin目錄下的idea.exe.vmoptions無(wú)效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring使用注解存儲(chǔ)Bean對(duì)象的方法詳解

    Spring使用注解存儲(chǔ)Bean對(duì)象的方法詳解

    在使用學(xué)習(xí)使用 Spring過程中,當(dāng)我們要實(shí)現(xiàn)一個(gè)功能的時(shí)候,先應(yīng)該考慮的是有沒有相應(yīng)的注解是實(shí)現(xiàn)對(duì)應(yīng)功能的,Spring 中很多功能的配置都是可以依靠注解實(shí)現(xiàn)的,而本篇中介紹的是使用注解來(lái)存儲(chǔ) Bean 對(duì)象
    2023-07-07
  • Java的Servlet及其生命周期詳解

    Java的Servlet及其生命周期詳解

    這篇文章主要介紹了Java的Servlet及其生命周期詳解,Servlet是用Java編寫的服務(wù)器端程序,一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù),其主要功能在與交互式的瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài)web內(nèi)容,需要的朋友可以參考下
    2023-11-11
  • 聊聊Spring?Boot如何配置多個(gè)Kafka數(shù)據(jù)源

    聊聊Spring?Boot如何配置多個(gè)Kafka數(shù)據(jù)源

    這篇文章主要介紹了Spring?Boot配置多個(gè)Kafka數(shù)據(jù)源的相關(guān)知識(shí),包括生產(chǎn)者、消費(fèi)者配置,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄

    spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄

    這篇文章主要為大家介紹了spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄,突然在本地啟動(dòng)不起來(lái)了,表象特征就是在本地IDEA上運(yùn)行時(shí),進(jìn)程卡住也不退出,應(yīng)用啟動(dòng)時(shí)加載相關(guān)組件的日志也不輸出
    2022-02-02
  • java軟引用在瀏覽器使用實(shí)例講解

    java軟引用在瀏覽器使用實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java軟引用在瀏覽器使用實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的操作方法

    SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的操作方法

    隨著安全性的要求越來(lái)越高,目前許多項(xiàng)目中都使用了驗(yàn)證碼,驗(yàn)證碼也有各種類型,如 圖形驗(yàn)證碼、短信驗(yàn)證碼、郵件驗(yàn)證碼、人臉識(shí)別等,本文給大家介紹SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的方法,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Git和Maven的子模塊簡(jiǎn)單實(shí)踐

    Git和Maven的子模塊簡(jiǎn)單實(shí)踐

    今天小編就為大家分享一篇關(guān)于Git和Maven的子模塊簡(jiǎn)單實(shí)踐,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論

石屏县| 化德县| 沁源县| 建平县| 桐柏县| 桂东县| 武威市| 济南市| 上林县| 宜兴市| 丹寨县| 炉霍县| 海淀区| 湖南省| 定襄县| 河曲县| 南康市| 永善县| 扶绥县| 绵竹市| 儋州市| 龙口市| 丰镇市| 梁平县| 龙南县| 多伦县| 香格里拉县| 梅州市| 枞阳县| 武清区| 永靖县| 苗栗市| 淮滨县| 呼和浩特市| 全椒县| 宝坻区| 全州县| 赤峰市| 虹口区| 勃利县| 年辖:市辖区|