byName是怎么完成自動(dòng)裝配的?set方法是什么時(shí)候被調(diào)用的?
byName中的set方法是自動(dòng)被調(diào)用的么?怎么實(shí)現(xiàn)的?
執(zhí)行 InjectionService service = super.getBean("injectionService"); 是不是就同時(shí)執(zhí)行了
public?void?setInjectDao(injectDao?injectDao)?{ ??????this.injectDao?=?injectDao; }
2016-12-13
執(zhí)行流程是:
加載spring配置文件。
通過構(gòu)造方法獲取service類的實(shí)例。(這里獲取到實(shí)例還沒有執(zhí)行Dao中的方法)
通過service實(shí)例調(diào)用service的方法,service中的方法調(diào)用Dao的方法,在service中通過私有化Dao類的屬性和set方法注入了Dao類。這里的set方法的參數(shù)就是ByName執(zhí)行的關(guān)鍵,在調(diào)用了service方法時(shí)會(huì)通過這個(gè)set方法的參數(shù)名去spring配置文件中找id和參數(shù)名稱一致的bean。找到后就裝配這個(gè)bean對應(yīng)的Dao類。
也就是說你set方法中的參數(shù)名injectDao必須要和spring配置文件中的id一樣,否則會(huì)找不到。
ByType的話就跟id沒有關(guān)系,會(huì)找類型一致的去加載。
2017-01-18
public void testSay() {
?? ??? ?AutoWiringService service = super.getBean("autoWiringService");
?? ??? ?service.say(" this is a test");
?? ?}
super.getBean("autoWiringService");這個(gè)怎么理解,是什么意思
2016-12-13
我也是在學(xué)習(xí),有更深入的理解的話可以互相分享。嘿嘿