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