第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

用@Autowired的時(shí)候,到底是寫接口的名字還是實(shí)現(xiàn)類的名字呢?

有一點(diǎn)沒明白,為什么注解@repository注解的是接口InjectionDAO的實(shí)現(xiàn)類InjectionDAOImpl,而在InjectionServiceImpl中定義的屬性InjectionDAO injectionDAO自動(dòng)裝配,為什么最后得到的是InjectionDAOImpl的實(shí)例。

-----上面是某位同學(xué)的提問,我也有這樣的疑問----

@Service注解服務(wù)層的時(shí)候,在unitest中,是從ApplicationContext.getBean("實(shí)現(xiàn)類名字,首字母小寫") 這樣獲取的。

也就是說,在容器中初始化的Bean應(yīng)該按照實(shí)現(xiàn)類名字規(guī)則。 這一點(diǎn)如果是用xml配置是不存在這樣的問題,因?yàn)閤ml可以指定id, id 是接口,class指向?qū)崿F(xiàn)類。?

可以當(dāng)老師講 InjectionDAO 注入的時(shí)候,我以為也是需要?InjectionDAO injectionDAOImpl;這樣來注入的,因?yàn)槿萜髦写嬖诘腷ean名字應(yīng)該是@Repository注解的實(shí)現(xiàn)類,InjectionDAOImpl。

可以老師的例子是用接口名字的, ?有其他規(guī)則? ?

正在回答

2 回答

這個(gè)其實(shí)是創(chuàng)建了實(shí)現(xiàn)類的對象但引用了接口類型,即"InjectionDao injectionDao = new InjectionDaoImpl()", 這個(gè)其實(shí)是Java多態(tài)性(向上轉(zhuǎn)型)的一種應(yīng)用。在實(shí)現(xiàn)類處加@Repository注解,意思就是new InjectionDaoImpl(), 而在InjectionServiceImpl中定義屬性InjectionDAO injectionDAO就是將new出來的這個(gè)InjectionDaoImpl對象向上轉(zhuǎn)型為InjectionDao類型。

0 回復(fù) 有任何疑惑可以回復(fù)我~

自問自答一下,查完資料,@Autowired默認(rèn)是按照byType查找,然后byType也不能說明直接查找到實(shí)現(xiàn)類呀。

Hmm,沒有查到文檔,我想在初始化容器的時(shí)候,掃面類的時(shí)候,容器也記下了每個(gè)類實(shí)現(xiàn)了哪些接口。 然后當(dāng)你用接口的引用時(shí),容器給你autowired一個(gè)實(shí)現(xiàn)類的實(shí)例了。 PS:當(dāng)我創(chuàng)建了2個(gè)類,實(shí)現(xiàn)同一接口的時(shí)候,報(bào)錯(cuò)了。 發(fā)現(xiàn)有2個(gè)類實(shí)現(xiàn)同一接口,改從byName查找了

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.ken.study.spring_study.DAOSave] is defined: expected single matching bean but found 2: DAOSaveImpl,DAOSaveImpl2

這個(gè)時(shí)候呢,應(yīng)該配合@Qualifier來用,存在多個(gè)實(shí)現(xiàn)類,可以指定名字,

不過比較有趣,看上面exception信息,這個(gè)時(shí)候用@Repository注解的DAO兩個(gè)實(shí)現(xiàn)類,bean名字不是首字母小寫,而是大寫.......


4 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕娘6527991

我自己寫的時(shí)候也碰到奇怪的問題,最開始沒有寫默認(rèn)構(gòu)造器導(dǎo)致出現(xiàn)不能實(shí)例化這個(gè)service類,后來加上默認(rèn)構(gòu)造方法,沒有setter方法,也沒有含參構(gòu)造方法,居然能把屬性給賦值上去,確實(shí)挺強(qiáng)大的。聯(lián)想下之前的byType、byName、constructor,這個(gè)autowired應(yīng)該是綜合了三種方法。并且這個(gè)三種方法實(shí)現(xiàn)和setter和構(gòu)造器注入是不一樣的,否則沒有setter沒有含參構(gòu)造器,autowired還能注入,肯定是因?yàn)閎yType和構(gòu)造器與setter注入是不一樣的方法
2018-09-20 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

用@Autowired的時(shí)候,到底是寫接口的名字還是實(shí)現(xiàn)類的名字呢?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號