Spring容器能夠自動(autowire)關聯協做(collaborating)bean。您能夠經過檢查ApplicationContext的內容來容許Spring自動解析您的bean的協做者(其餘bean)。autowiring具備如下優勢:數組
當使用基於XML的配置元數據[2]時,您可使用<bean />元素的autowire屬性爲bean定義指定自動鏈接模式。自動連線功能有四種模式。您能夠指定每一個bean的自動佈線,所以能夠選擇要自動連線的。架構
Table 7.2. Autowiring modes函數
Mode | Explanation |
---|---|
no 工具 |
(默認)無自動接線。 Bean引用必須經過ref元素定義。不建議更改默認設置用於較大的部署,由於明確指定協做者能夠更好地控制和清晰。在某種程度上,它記錄了系統的結構。 設計 |
byNa me 對象 |
按屬性名稱自動裝配。Spring會找到一個與須要自動連線的屬性名稱相同的bean。例如,若是bean定義經過名稱設置爲autowire,而且它包含master屬性(即具備setMaster(..)方法),Spring尋找一個名爲master的bean定義,並使用它來設置屬性。開發 |
byType文檔 |
若是容器中存在屬性類型的一個bean,則容許屬性自動鏈接。若是存在多個,則會拋出一個致命異常,這表示您可能不會對該bean使用byType自動連線。若是沒有匹配的bean,沒有任何反應;該屬性未設置。字符串 |
constructor部署 |
相似於byType,但適用於構造函數參數。若是在容器中沒有一個構造函數參數類型的bean,則會引發致命錯誤。 |
使用byType或構造函數自動佈線模式,能夠對數組和類型集合進行連線。在這種狀況下,提供符合預期類型的容器內的全部自動連線候選者以知足依賴性。果預期的鍵類型爲String,則能夠自動鏈接強類型的Maps。自動連線的地圖值將包含與預期類型相匹配的全部bean實例,Maps鍵將包含相應的bean名稱。
您能夠將autowire行爲與依賴關係檢查相結合,這是自動連線完成後執行的。
Autowiring的侷限性和缺點
從自動裝配中排除一個bean
在每一個bean的基礎上,您能夠將bean從自動裝配中排除。在Spring的XML格式中,將<bean />元素的autowire-candidate屬性設置爲false;容器使特定的bean定義不可用於自動佈線基礎架構(包括註釋樣式配置,例如@Autowired)。