溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中依賴注入框架的元注解是怎么實(shí)現(xiàn)的

發(fā)布時間:2020-12-21 15:05:42 來源:億速云 閱讀:160 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Java中依賴注入框架的元注解是怎么實(shí)現(xiàn)的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

寫兩個自定義注解,一個叫@Virtual元注解,一個叫@Real注解,把@Virtual放在@Real上,把@Real放到一個User類上,看看編譯結(jié)果,然后用反射從這個類上取@Virtual,看@Real能不能自動引導(dǎo)到@Virtual上。示例代碼如下:

@Retention(RetentionPolicy.RUNTIME)
public @interface Virtual {
}

@Virtual
@Retention(RetentionPolicy.RUNTIME)
public @interface Real {
}

@Real
public class User {
}

編譯后用IDE查看class文件,發(fā)現(xiàn)@Virtual元注解仍然只標(biāo)在@Real上,User類上只標(biāo)有@Real注解,可證明編譯器沒有為元注解做什么工作。然后反射的結(jié)果也是不能從User類拿到@Virtual,可證明JVM runtime也沒有為元注解做什么工作。因此@Qualifier的元注解特性極有可能是相關(guān)框架自行實(shí)現(xiàn)的。

要怎么實(shí)現(xiàn)呢?我們可以自己動腦筋想一想。考慮到,Spring框架掃描所有的class文件(之所以要掃描class文件而非class對象,是因?yàn)镴ava不提供遍歷所有class對象的功能,使框架不得不重復(fù)實(shí)現(xiàn)對class文件的解析工作),將其中有相應(yīng)注解的class轉(zhuǎn)化為BeanDefinition注冊到BeanFactory。那么@Qualifier也可以類似地處理,對于掃描到的class,如果它具有@Qualifer注解,并且自身也是注解(實(shí)現(xiàn)了java.lang.Annotation interface),就作為一個自定義注解注冊到框架里(比如說,QualifierAnnotationRegistry?),如此一來框架就認(rèn)識所有的包含@Qualifier元注解的自定義注解了,之后要使用就順理成章了。

關(guān)于Java中依賴注入框架的元注解是怎么實(shí)現(xiàn)的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI