Spring設值注入和構造注入的比較
阿新 • • 發佈:2019-01-24
在過去的開發過程中,這兩種注入方式都是非常常用的。Spring也同時支援這兩種依賴注入的方式:設值注入和構造注入。這兩種依賴注入的方式並沒有絕對的好壞,知識適應的場景不一樣。
相比而言設定注入具有以下優點:
1)與傳統的JavaBean的寫法更相似,程式開發人員更容易理解、接受。通過setter方法設定依賴關係顯得更加直觀、自然。
2)對於複雜的依賴關係,如果採用構造注入,會導致構造器過於臃腫,難以閱讀。Spring在建立Bean例項時,需要同時例項化其依賴的全部例項,因而導致效能下降。而是用設定注入可以避免這些問題。
3)尤其在某些屬性可選的情況下,多引數的構造器更加笨重。
某些情況下,構造注入的優勢:
1)構造注入可以再構造器中決定依賴關係的注入順序,有限依賴的優先注入。例如,元件中其它依賴關係的注入,常常需要依賴於Datasource的注入。採用構造注入,可以在程式碼中清晰地決定注入順序。
2)對於依賴關係無需變化的Bean,構造注入更加有用。因為沒有setter方法,所有的依賴關係全部在構造器內設定。因此,無需擔心後續程式碼對依賴關係的破壞。
3)依賴關係只能在構造器中設定,則只有組建的建立者才能改變組建的依賴關係。隊組建的呼叫者而言,元件內部的依賴關係完全透明,更符合高內聚的原則。
建議:採用設定注入為主,構造注入為輔的注入策略。對於依賴關係無需變化的注入,儘量採用構造注入;而其它的依賴關係的注入,則考慮設值注入。