@Autowired和@Resourse關鍵字的區別


  這個問題是平時我們面試時面試官非常喜歡問的一個問題。首先,@Resourse是javax.annother包提供的一個注解關鍵字,是Java EE的方法,但Spring也支持該注解的導入,而@Autowired是Spring提供的關鍵字。

  它們的共同點是都是用來裝配Java Bean的(這是一句廢話哈哈哈),兩者都可以寫在字段或者是setter方法上,如果加在字段上,那對應的字段就不需要再添加setter方法了。兩者也都可以配合@Component關鍵字來使用,在ApplicationContext.xml加入如下配置后(基包后面根據實際情況填自己需要Spring掃描的包名),可以加在普通pojo類上,效果相當於<Bean id="******" class="*******">,直接將普通的pojo實例化到Spring容器中。

<context:component-scan base-package=”******”> 

  但他們的差異也是顯著的。首先,@Resourse關鍵字是byName的,也就是根據JNDI名稱來裝配Bean,其不關心Bean的類,例如,Spring想找一個叫做小明的人,@Resourse只會去尋找小明,而它不關心小明到底是一個男人還是一個女人。而@Autowired是byType的,剛好與@Resourse相反,@Autowired只關心Bean的類型,而不關心這個Bean到底叫什么。如果存在多個同樣類型的Bean,就會報出BeanCreationException的錯誤,要解決這個問題,可以修改如下配置,此時@Autowired關鍵字也會變成byName,但這種方法不是很推薦。

<beans default-autowire="byName"/>

  此處我們應當使用另一種方法,使用@Qualifier關鍵字,@Qualifier(*****)來讓Spring根據Bean的名稱來進行裝配。此外,@Resourse可以使用復數形式@Resourses來裝配多個Bean。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM