javascript
Spring----最小化Spring配置
在Spring的配置文件中,我們可以使用<bean>元素定義Bean,以及使用<constructor-arg>或著<property>元素裝配bean,這對于包含少量Bean的應用來說以經非常不錯了,但是隨著應用的發展,我們不得不編寫越來越復雜的XML配置。
為解決這個問題,Spring提供了幾種技巧,可以幫助我們簡化XML的配置。
- 自動裝配:有助于減少甚至消除<constructor-arg>和<property>元素,讓Spring自動識別如何裝配Bean的依賴關系
- 自動檢測:比自動裝配更進一步,讓Spring能夠自動識別哪些類需要被裝配成Spring bean,從而減少對<bean>元素的使用。
我們首先 舉一個例子:
1.創建一個Singer類:
?
2.創建一個Instruments類繼承Instrument接口
3.創建一個Singer.xml文件:
4.測試方法:
5.運行結果
為了簡化上面案例的xml文件配置,我們可以通過一下四種自動裝配Bean的方案來實現
(1)byName自動裝配
在Spring中,所有的東西都會賦予一個名字,因此Bean的屬性也會有名字,加入屬性的名字剛好與要被裝配到該屬性的Bean的名字相同,那么Spring便可以通過byName的方式,將該Bean自動裝配到對應屬性中。
運行結果:
注意 :若時xml文件中存在多個Singer的bean,且均已byName的形式自動裝配,那么所有的Singer類裝配的均為同一個instrument。
若配置了byName自動裝配,而卻沒有id為instrument的bean,則Singer中instrument為空。
(2)byType自動裝配
其工作方式類似于byName自動裝配,只不過不是匹配名字,而是檢查屬性的類型。
運行結果:
注意:如果存在多個bean與需要裝配的屬性的類型都一致,那么Spring不會猜測那個bean更適合,而是選擇拋出異常。例如:
(3)constructor 自動裝配
如果我們要通過構造器來注入bean,可以通過設置autowire="constructor" 來取代
<constructor-arg>元素。Spring會自動匹配一個構造器所有入參的bean,并自動注入。
注意:constructor 自動裝配和byType自動裝配具有相同的局限性,當發現多個Bean匹配某個構造器的入參時,Spring不會嘗試猜測哪個Bean更適合自動裝配,此外,如果一個類有多個構造器,且都滿足自動裝配條件時,Spring也不會嘗試判斷哪個構造器更適合使用。
(4)最佳自動裝配
如果我們將autowire的屬性設置為autodetect,那么Spring便會為我們選擇最佳的自動裝配類型。
Spring會首先嘗試使用constructor自動裝配,如果沒有發現類型匹配的bean,將會嘗試byType自動裝配。
?
使用注解裝配
在使用基于注解裝配前,我們需要在Spring配置中去啟用他。
使用 @Autowired實現在動裝配
當我希望使用@Autowired讓Spring自動Singer,我們可以在需要裝配的屬性對應的set方法上添加
@Autowired注釋。例如:
結果:
@Autowired 不僅可以用于標注set方法,還可以用來標注需要自動裝配Bean的任意方法。包括構造方法。放@Autowired對構造方法進行標注時,在Spring的XML文件中即使沒有使用<constructor-arg>元素配置Bean,該構造器也會進行自動裝配
@Autowired還可以標注類的屬性,刪除set方法。
運行結果:
注意:@Autowired所標注的屬性,必須時可裝配的,如果沒用Bean可以裝配到@Autowired所標注的屬性中,便會拋出異常。
讓Spring盡早失敗,要好于在以后拋出空指針異常。
有時候屬性不一非要裝配,null值也是可以的,我們可以使用@Autowired的required屬性為false來配置自動裝配是可選的。
若required的值為false,當不存在可以裝配的Bean時,該屬性配裝配為null.
轉載于:https://www.cnblogs.com/red-evil/p/10058493.html
總結
以上是生活随笔為你收集整理的Spring----最小化Spring配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机被恢复出厂设置了怎么还原?
- 下一篇: JavaScript里面的居民们1-数据