@DependsOn注解可以標注在類上和方法上面,只有一個屬性value,它是一個數組,表示依賴的bean名稱的數組,可以指定一個或者多個。
@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceDependsOn{String[]value()default{};
如下,在DependsOnBeanA上標注了@DependsOn注解,那么DependsOnBeanA需要在Bean dependsOnBeanB
創建完成之后才能創建自己,這里value的值為bean的名稱,如果沒有對bean設置名稱,那么就為首字母為小寫的類名。
@Component@DependsOn(value={"dependsOnBeanB"})publicclassDependsOnBeanA{}
spring掃描到所有的標有@Component(@Service,@Repository等注解本質就是@Component)的類和標有@Bean的方法后,會進行處理,這里,它會判斷是否標注有@DependsOn,如果標注有,則會設置BeanDefinition的dependsOn,設置其依賴的bean,如下在AnnotationConfigUtils注解工具類中源碼如下。
staticvoidprocessCommonDefinitionAnnotations(AnnotatedBeanDefinitionabd,AnnotatedTypeMetadatametadata){//省略若干代碼AnnotationAttributesdependsOn=attributesFor(metadata,DependsOn.class);if(dependsOn!=null){abd.setDependsOn(dependsOn.getStringArray("value"));}}
上面是在注冊bean元數據階段,注冊元數據階段只是組裝好bean之間的依賴,然后在真正創建bean的時候,才會進行判斷,如下在AbstractBeanFactory類中的doGetBean中,會從RootBeanDefinition中取出dependsOn的值,不為空則進行bean的創建,創建bean的過程和其他bean的創建過程也是一樣的。
protected<T>TdoGetBean(Stringname,@NullableClass<T>requiredType,@NullableObject[]args,booleantypeCheckOnly)throwsBeansException{RootBeanDefinitionmbd=getMergedLocalBeanDefinition(beanName);//Guaranteeinitializationofbeansthatthecurrentbeandependson.String[]dependsOn=mbd.getDependsOn();if(dependsOn!=null){for(Stringdep:dependsOn){if(isDependent(beanName,dep)){thrownewBeanCreationException(mbd.getResourceDescription(),beanName,"Circulardepends-onrelationshipbetween'"+beanName+"'and'"+dep+"'");}registerDependentBean(dep,beanName);try{getBean(dep);}catch(NoSuchBeanDefinitionExceptionex){thrownewBeanCreationException(mbd.getResourceDescription(),beanName,"'"+beanName+"'dependsonmissingbean'"+dep+"'",ex);}}}}
從上面可以看出,其實還是比較簡單,主要就是判斷是否有依賴的bean,如果有就先創建依賴的bean,沒有的話就往下執行。
“Spring注解@DependsOn怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注本站網站,小編將為大家輸出更多高質量的實用文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
銀行回收硬幣嗎?銀行收硬幣,因為硬幣也是錢的一種形式,銀行就是專門與錢打交道的地方,你有硬幣可以去銀行存儲,也可以去銀行去兌換紙幣。其實回收硬幣是每個銀行應盡的義務,各銀行都應該回收。但存硬幣比較繁瑣,對銀行來說,耗時、耗力。因此,部分銀行都不太愿意收硬幣。舊硬幣回收價格一覽表一、第四套人民幣1元硬幣1、第四套人民幣1元硬幣于1999年10月16日開始發行,正面主景圖案為工人、農民、知識分子頭像,...
CNY是什么幣種?CNY(Chinese Yuan)是ISO分配給中國的幣種表示符號,中文名稱人民幣。人民幣的簡寫用的是其漢語拼音開頭字母組合,即RMB,但它的標準貨幣符號為CNY。CNY是國際貿易中表示人民幣元的唯一規范符號。如今已取代了RMB的記法,統一用于外匯結算和國內結算。但用于國內結算時在不發生混淆的情況下RMB仍然可以用。交易幣種cny是什么?CNY是中國人民幣的縮寫,中國人民幣元的英...
(資料圖片僅供參考)提起掃描后的文件怎么才能編輯大家在熟悉不過了,被越來越多的人所熟知,那你知道掃描后的文件怎么才能編輯嗎?快和小編一起去了解一下吧!掃描后的文件的編輯方法是可以直接在圖片編輯軟件如PHOTOSHOP中處理并編輯;如果打描的是打印的文字稿,可用OCR軟件識別后用OFFICE軟件處理。用掃描儀掃描后生成的電子圖片。便于攜帶和保存,是各企、事業單位進行材料保。用于某些特殊申請中的資料。...