在前面對IoC容器實(shí)現(xiàn)原理的分析中直是通過 Bean Definition的屬性值和構(gòu)造函數(shù)以顯式的方式對Bean的依賴關(guān)系進(jìn)行管理的。在 Spring中,相對這種顯式的依賴管理方式IoC容器還提供了自動(dòng)依賴裝配的方式,為應(yīng)用使用容器提供更大的方便。在自動(dòng)裝配中,不需要對Bean屬性做顯式的依賴關(guān)系聲明,只需要配置好 autowiring屬性,IoC容器會(huì)根據(jù)這個(gè)屬性的配置,使用反射自動(dòng)查找屬性的類型或者名字,然后基于屬性的類型或名字來自動(dòng)匹配oC容器中的Bean,從而自動(dòng)地完成依賴注入。
這是一個(gè)很有誘惑力的功能特性,使用它可以完成依賴關(guān)系管理的自動(dòng)化,但是使用時(shí)定要注意,計(jì)算機(jī)只是在自動(dòng)執(zhí)行,它是不會(huì)思考的。使用這個(gè)特性的優(yōu)點(diǎn)是能夠減少用戶配置Bean的工作量,但它是一把雙刃劍,如果使用不當(dāng),也會(huì)為應(yīng)用帶來不可預(yù)見的后果調(diào)方所以,使用時(shí)需要多一些小心和謹(jǐn)慎。
從 autowiring使用上可以知道,這個(gè) autowiring屬性在對Bean屬性進(jìn)行依賴注入時(shí)起作用ax:對Bean屬性依賴注入的實(shí)現(xiàn)原理,在前面已經(jīng)做過分析?;仡櫮遣糠謨?nèi)容,不難發(fā)現(xiàn),對autowirng屬性進(jìn)行處理,從而完成對Bean屬性的自動(dòng)依賴裝配,是在 populate Bean中實(shí)現(xiàn)的節(jié)選 AbstractAutowire Capable Bean Factory的 populate Bean方法中與autowiring實(shí)現(xiàn)相關(guān)的部行體次分,可以清楚地看到這個(gè)特性在容器中實(shí)現(xiàn)的入口。也就是說,對屬性 autowiring的處理是populateBean處理過程的一個(gè)部分。在 populate Bean的實(shí)現(xiàn)中,在處理一般的Bean之前,先對 autowiring屬性進(jìn)行處理。如果當(dāng)前的Bean配置了 autowire_by_name和 autowire_by_type屬性,那么調(diào)用相應(yīng)的 autowireByName方法和 autowire ByType方法。這兩個(gè)方法很巧妙地應(yīng)用1C容器的特性。例如,對于 autowire_ by_name,它首先通過反射機(jī)制從當(dāng)前Bean中得到需要注入的屬性名,然后使用這個(gè)屬性名向容器申請與之同名的Bean,這樣實(shí)際又觸發(fā)了另Bean的生成和依賴注入的過程。
咨詢熱線
010-85377344
135-21581588
微信客服
QQ客服
3026106565 點(diǎn)擊咨詢