在Spring框架xml配置中共有5種自動裝配
- no:默認的方式是不進行自動裝配的,通過手工設置ref屬性來進行裝配bean。
- byName:通過bean的名稱進行自動裝配,如果一個bean的 property 與另一bean 的name 相同,就進行自動裝配。
- byType:通過參數的數據類型進行自動裝配。
- constructor:利用構造函數進行裝配,並且構造函數的參數通過byType進行裝配。
- autodetect:自動探測,如果有構造方法,通過 construct的方式自動裝配,否則使用 byType的方式自動裝配。
使用@Autowired註解自動裝配的過程是怎樣的?
使用@Autowired註解來自動裝配指定的bean。在使用@Autowired註解之前需要在Spring配置文件進行配置<context:annotation-config />。
在啓動spring IoC
時,容器自動裝載了一個AutowiredAnnotationBeanPostProcessor
後置處理器,當容器掃描到@Autowied
、@Resource
或@Inject
時,就會在IoC容器自動查找需要的bean,並裝配給該對象的屬性。在使用@Autowired時,首先在容器中查詢對應類型的bean:
如果查詢結果剛好爲一個,就將該bean裝配給@Autowired指定的數據;
如果查詢的結果不止一個,那麼@Autowired會根據名稱來查找;
如果上述查找的結果爲空,那麼會拋出異常。解決方法時,使用required=false。
自動裝配有哪些侷限性?
自動裝配的侷限性是:
重寫:你仍需用 和 配置來定義依賴,意味着總要重寫自動裝配。
基本數據類型:你不能自動裝配簡單的屬性,如基本數據類型,String字符串,和類。
模糊特性:自動裝配不如顯式裝配精確,如果有可能,建議使用顯式裝配。