resource和autowired區(qū)別 resource注解
- 夕逆IT
- 開(kāi)發(fā)語(yǔ)言
- 2023-08-13
- 408
大家好,今天小編來(lái)為大家解答resource和autowired區(qū)別這個(gè)問(wèn)題,resource注解很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!@resource默認(rèn)注入方法...
大家好,今天小編來(lái)為大家解答resource和autowired區(qū)別這個(gè)問(wèn)題,resource注解很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!
@resource默認(rèn)注入方法
默認(rèn)按byName自動(dòng)注入。既不指定name屬性,也不指定type屬性,則自動(dòng)按byName方式進(jìn)行查找。如果沒(méi)有找到符合的bean,則回退為一個(gè)原始類型進(jìn)行進(jìn)行查找,如果找到就注入。只是指定了@Resource注解的name,則按name后的名字去bean元素里查找有與之相等的name屬性的bean。只指定@Resource注解的type屬性,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會(huì)拋出異常。既不指定name屬性,也不指定type屬性會(huì)根據(jù)類型后面定義的屬性名去找如果沒(méi)找到會(huì)根據(jù)類型去匹配如果這個(gè)時(shí)候這個(gè)接口是多實(shí)現(xiàn)的話就會(huì)報(bào)錯(cuò)
springcloud報(bào)多個(gè)bean怎么處理
當(dāng)SpringCloud報(bào)多個(gè)bean時(shí),可以使用@Qualifier注解來(lái)指定要注入的特定bean。@Qualifier注解可以與@Autowired或@Inject一起使用,以指定要注入的bean的名稱或限定符。
另外,還可以使用@Primary注解來(lái)指定首選的bean,當(dāng)存在多個(gè)候選bean時(shí),將優(yōu)先選擇帶有@Primary注解的bean進(jìn)行注入。如果以上方法仍無(wú)法解決沖突,可以考慮使用@Conditional注解來(lái)根據(jù)條件選擇要注入的bean。
springboot單元測(cè)試,找不到bean
這個(gè)問(wèn)題可能是由于以下原因之一導(dǎo)致的:
1.您的測(cè)試類包名和啟動(dòng)類包名不一致。請(qǐng)確保它們是相同的。
2.您使用的注解與當(dāng)前SpringBoot版本不匹配。請(qǐng)檢查您使用的注解是否與當(dāng)前SpringBoot版本匹配。
3.開(kāi)發(fā)代碼中的bean類注入不正常。請(qǐng)檢查開(kāi)發(fā)代碼中的bean類是否注入正常,然后再根據(jù)情況進(jìn)行排查。
Spring中如何解決自動(dòng)裝配的歧義性
我們先來(lái)看看什么是Spring自動(dòng)裝配的歧義性:
當(dāng)定義的多個(gè)bean都是繼承同一個(gè)接口的時(shí)候,使用@Autowired注解對(duì)接口進(jìn)行注入的時(shí)候,會(huì)出現(xiàn)歧義性。因?yàn)镾pring這時(shí)候不知道找哪個(gè)實(shí)現(xiàn)bean注入了。
Talkischeap,showmethecode.來(lái)看下面這段代碼:上面的代碼就是典型的Spring自動(dòng)裝配的歧義性,如果在idea編輯器下編寫(xiě),會(huì)發(fā)現(xiàn)他會(huì)提示報(bào)錯(cuò):
看到這,我相信大家都已經(jīng)明白了什么是Spring自動(dòng)裝配的歧義性。
解決自動(dòng)裝配的歧義問(wèn)題那實(shí)際項(xiàng)目開(kāi)發(fā)中真有這種情況該如何解決呢?
采用@Primary注解到其中一個(gè)類,這樣等于是給實(shí)現(xiàn)了CarService接口的指定bean定義為首選類,這樣Spring默認(rèn)就會(huì)注入這個(gè)首選類,當(dāng)然首選類不可以同時(shí)標(biāo)記兩個(gè)以上。
那么問(wèn)題來(lái)了,如果我不想注入這個(gè)首選類,我想使用另外一個(gè)bean怎么辦呢?
給這個(gè)bean起一個(gè)別名:
大家是不是知道了如何解決多實(shí)現(xiàn)類自動(dòng)裝配的問(wèn)題?是不是很簡(jiǎn)單呢?這里大家是不是發(fā)現(xiàn)使用@Resource注解可以很好的解決上面的問(wèn)題?經(jīng)常寫(xiě)代碼的人一定知道了解決的辦法了:以上就是Spring自動(dòng)裝配的歧義性問(wèn)題以及如何解決,希望我的解答對(duì)大家有幫助!那么這里再問(wèn)大家一個(gè)問(wèn)題:@Autowired和@Resource注解的區(qū)別是什么呢?期待你的留言~
我是【java架構(gòu)設(shè)計(jì)】,關(guān)注我,持續(xù)為您提供Java領(lǐng)域優(yōu)質(zhì)內(nèi)容!springboot未來(lái)會(huì)沒(méi)落嗎
不會(huì),SpringBoot已經(jīng)融合了一個(gè)生態(tài)圈,就像大家離不開(kāi)Spring一樣??觳灏问讲僮?,為服務(wù)的整個(gè)提供了便捷。
未來(lái),也許會(huì)出現(xiàn)新的框架和技術(shù)。但那是基于SpringBoot基礎(chǔ)開(kāi)發(fā)的,就像SpringMVC、SpringBoot基于Spring一樣。會(huì)在此基礎(chǔ)上做改進(jìn),推出更新的版本。但是內(nèi)核沒(méi)有改變。就像SpringBoot主要實(shí)現(xiàn)了SpringMVC的自動(dòng)裝配,EnableAutoConfiguration,JavaSPI機(jī)制,WebMVCConfigure機(jī)制,底層還是有SpringMVC的影子。
做技術(shù)就要與時(shí)俱進(jìn),弄清楚框架底層原理,弄透設(shè)計(jì)思想,設(shè)計(jì)模式,才能長(zhǎng)久。
Spring注釋Autowired和@Resource的區(qū)別
1、來(lái)源不同
Resource注解是由javax.annotation.Resource,不是spring框架的,而Autowired由spring所提供,其位于org.springframework.beans.factory.annotation.Autowired
2、支持裝配類型不同
Autowired只能按照類型進(jìn)行裝配,而Resource不僅能按照類型進(jìn)行裝配,還可以按照名稱進(jìn)行裝配
好了,關(guān)于resource和autowired區(qū)別和resource注解的問(wèn)題到這里結(jié)束啦,希望可以解決您的問(wèn)題哈!
本文鏈接:http://xinin56.com/kaifa/908.html