Java進(jìn)階(五十三)JAVA 注解機(jī)制

      網(wǎng)友投稿 612 2025-04-01

      Java進(jìn)階(五十三)JAVA 注解機(jī)制

      不知道大家在平時(shí)用到注解的頻率多不多,注解對(duì)我們的幫助很大,能為我們節(jié)省很多工作。最直接的就是可以代替配置文件的功能,無論是基本的servlet還是常用的三大框架,里面都使用了注解,并且逐漸的代替了原本繁瑣的配置,大大提高了編碼效率。

      隨著注解使用的越來越頻繁,我們對(duì)底層實(shí)現(xiàn)的了解越來越少,所以在這一章我們來好好了解一下注解是怎么實(shí)現(xiàn)的。

      首先注解是什么?通俗的意思是為程序的元素(類、方法、成員變量)加上更直觀更明了的說明(比如 @Override),這些說明信息是與程序的業(yè)務(wù)邏輯無關(guān),并且是供指定的工具或框架使用的。

      他的基本原理和流程就是:通過調(diào)用Java的反射機(jī)制相關(guān)API來訪問annotation信息。首先加載使用注解的類,得到class類。然后再得到類相應(yīng)的方法,成員變量。得到變量后調(diào)用相應(yīng)的類、方法、成員變量的對(duì)象的isAnnotationPresent方法判斷是否使用了注解。之后通過調(diào)用相應(yīng)的類、方法、成員變量的的getAnnotation方法得到相應(yīng)的注解的對(duì)象。接下來我們就可以操作注解對(duì)象完成相應(yīng)的邏輯。

      我們來熟悉一下注解的基本結(jié)構(gòu):

      最上面的一部分注解叫做元注解,就是注解的注解。@Target 指的是這個(gè)注解可以用在什么地方。他的參數(shù)可以有如下:

      接著就是@Retention了,它指的是這個(gè)注解的生命周期。他的參數(shù)可以包括SOURCE、CLAS和 RUNTIME。

      SOURCE:如果Retention成員取值為SOURCE,表明該注解只存在源代碼當(dāng)中,在編譯的時(shí)候會(huì)被編譯器丟掉。如重寫方法時(shí),方法上面會(huì)有@Override注解,這個(gè)注解就是source類型的。

      CLASS:表示注解會(huì)被存到字節(jié)碼文件.class中,但是虛擬機(jī)載入class文件的時(shí)候不會(huì)將注解導(dǎo)入,因此運(yùn)行時(shí)無法得到。如果不在注解中使用Retention指定,則默認(rèn)的保留策略為CLASS。

      RUNTIME:不僅保存到class文件,還會(huì)被虛擬機(jī)載入內(nèi)存,因此在運(yùn)行的時(shí)候可以通過反射得到并且使用這些注解。我們待會(huì)的例子就是以RUNTIME為例。

      而 @Inherited和@Documented表達(dá)的意思比較簡(jiǎn)單:@Inherited

      表示子類可以繼承父類的注解(有空會(huì)細(xì)講);@Documented 表示生成doc文檔的時(shí)候會(huì)包含這個(gè)注解。

      “public @interface Anno”則是定義注解的關(guān)鍵字以及名字。接下來就是一些成員變量了,注意:這里是變量,不要以為有個(gè)括號(hào)就是方法了。使用方式是這樣的@Anno(name=“wizard”,age=12) 。

      注意:成員變量只能是基本類型、String、class、enum、Annotation和以上類型的數(shù)組,而且必須是無參數(shù)、不能拋出異常。

      Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel中復(fù)制和粘貼時(shí)如何保持公式和格式?
      下一篇:系統(tǒng)芯片ESD防護(hù)的協(xié)同設(shè)計(jì)》 —1.2 片上ESD防護(hù)策略
      相關(guān)文章
      亚洲综合精品香蕉久久网| 亚洲人成网站在线观看青青| 亚洲精品亚洲人成人网| 亚洲熟女乱综合一区二区| 亚洲第一页综合图片自拍| 欧洲亚洲国产精华液| 男人天堂2018亚洲男人天堂| 亚洲国产乱码最新视频| 亚洲伦理一二三四| 激情亚洲一区国产精品| 中文无码亚洲精品字幕| 亚洲综合无码一区二区痴汉| 国产精品亚洲综合久久| 亚洲日本成本人观看| 亚洲av最新在线观看网址| 怡红院亚洲红怡院在线观看| 国产亚洲成在线播放va| 久久精品熟女亚洲av麻豆| 国产成人精品亚洲| 亚洲国产天堂久久综合| 亚洲一区二区三区国产精品| 在线亚洲人成电影网站色www| 亚洲午夜久久久久久久久久| 亚洲国产精品成人精品无码区在线| 国产精品亚洲成在人线| 久久久亚洲欧洲日产国码农村| 亚洲av色福利天堂| 亚洲高清视频免费| 亚洲综合色丁香婷婷六月图片| 亚洲熟妇无码av另类vr影视| 亚洲高清毛片一区二区| 国产成人亚洲综合a∨| 亚洲一区二区三区无码影院| 亚洲精品无码专区在线在线播放| 久久伊人久久亚洲综合| 亚洲午夜在线一区| 亚洲GV天堂GV无码男同| 国产亚洲精久久久久久无码AV| 久久久久亚洲AV成人无码| 久久亚洲熟女cc98cm| 国产精品亚洲午夜一区二区三区|