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