亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

怎么回事 我按照老師的改了還是報錯?

5878d0130001c36f05000047.jpg

5878d0140001daa305000342.jpg

有沒有人能解答一下?

正在回答

5 回答

或者不改版本,添加@Qualifier("name")做限定

??? @Autowired
?? ?@Qualifier("stringStore")
?? ?private Store<String> s1;
?? ?
?? ?@Autowired
?? ?@Qualifier("integerStore")
?? ?private Store<Integer> s2;

5 回復 有任何疑惑可以回復我~
#1

慕標7744821 提問者

非常感謝!
2017-01-21 回復 有任何疑惑可以回復我~

個人理解,因為老師取得名字是s1,s2 @Autowired
按照ByName找不到叫name為s1,s2的bean,改成ByType尋找,結果發現s1定義的是Store<String>有兩個返回值都是StringStore所以就不知道該用哪一個,如果你把s1改成方法的名字(getStringStore
)就會發現不會出錯,因為@Autowired找到了一個叫getStringStore
的bean(前面講過,@Bean默認用方法名字作為bean的name)這里就用的ByName尋找。

總結,老師用s1,s2做名字使得@Autowired用ByName找不到,改為ByType結果有兩個StringStore,導致出錯。

老師改成Store沒報錯我是不理解的,老師改完后執行測試我發現有段被剪掉了,細心的同學應該發現了,老師也許做了別的操作,這我就不知道了。按照老師的代碼照敲編譯器都不讓我通過。

http://img1.sycdn.imooc.com//5a38e0ee0001434703420319.jpg

2 回復 有任何疑惑可以回復我~
#1

慕村8951117

,如果你把s1改成方法的名字(getStringStore )就會發現不會出錯,因為@Autowired找到了一個叫getStringStore 這幾句話好像說的不對 你說@Autowired先按照byName s1改成方法的名字getStringStore 雖然不會報錯 但是沒有裝配上 他是 null 我也不知道為什么 你后面說的話我贊同 @Autowired 和@Qualifier("stringStore") 配合使用就可以了
2018-01-20 回復 有任何疑惑可以回復我~
#2

慕村8951117

Autowire默認按照類型裝配,默認情況下它要求依賴對象必須存在如果允許為null,可以設置它required屬性為false,如果我們想使用按照名稱裝配,可以結合@Qualifier注解一起使用; @Resource的作用相當于@Autowired,只不過@Autowired按byType自動注入,而@Resource默認按 byName 你這樣寫就對了 @Resource private Store<String> stringStore;
2018-01-20 回復 有任何疑惑可以回復我~

為什么我導入的項目工程報錯


0 回復 有任何疑惑可以回復我~
#1

北海北極熊

導入項目報錯基本都是jar的問題,看下項目tomcat,jdk,編譯版本。更改下
2017-08-10 回復 有任何疑惑可以回復我~

確實是版本的事,貌似只有4.0.5版本可以

0 回復 有任何疑惑可以回復我~

spring版本有問題,換成較低版本可以

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

怎么回事 我按照老師的改了還是報錯?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號