




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
高級依賴配置與SpEL講師:李剛本次要點(diǎn)PropertyPathFactoryFieldRetrievingFactoryBeanMethodInvokingFactoryBeanSpring提供的Schema簡化配置Spring3.0提供的SpELSpring框架本質(zhì)在Spring配置文件中使用XML元素進(jìn)行配置,實(shí)際上驅(qū)動Spring執(zhí)行相應(yīng)的代碼。例如:使用<bean.../>元素:驅(qū)動Spring執(zhí)行無參數(shù)構(gòu)造器、或有參數(shù)的構(gòu)造器。還可驅(qū)動通過工廠方法創(chuàng)建Bean。使用<property.../>元素:驅(qū)動Spring執(zhí)行setter方法。Java程序還可能有其他類型的語句:調(diào)用getter方法、調(diào)用普通方法、訪問類或?qū)ο蟮腇ield,而Spring也為這種語句提供了對應(yīng)的配置語法:調(diào)用getter方法:使用PropertyPathFactoryBean。訪問類或?qū)ο蟮腇ield值:使用FieldRetrievingFactoryBean。調(diào)用普通方法:使用MethodInvokingFactoryBean。Spring框架本質(zhì)是什么?它可以讓開發(fā)者無需書寫Java代碼就可進(jìn)行Java編程,當(dāng)開發(fā)者采用合適的XML配置進(jìn)行配置之后,Spring就可通過反射在底層執(zhí)行任意的Java代碼。調(diào)用其他Bean的getter方法如果想將另一個類的屬性值的注入,可使用PropertyPathFactoryBean工廠類。如:<propertyname="age"> <beanid="person.son.age"class= "org.springframework.beans.factory.config.PropertyPathFactoryBean"/></property>PropertyPathFactoryBean的作用是調(diào)用指定Bean的getter方法PropertyPathFactory的說明PropertyPathFactory的本質(zhì)就是以聲明式方式來調(diào)用getter方法。例如:<beanid="theAge"class= "org.springframework.beans.factory.config.PropertyPathFactoryBean"> <propertyname="targetBeanName"value="person"/> <propertyname="propertyPath"value="son.age"/></bean>上面配置文件的實(shí)質(zhì)相當(dāng)于執(zhí)行如下代碼:theAge=person.getSon().getAge();獲取類或Bean的Field值通過FieldRetrievingFactoryBean類,可以將指定類或Bean的field值作為屬性值注入。FieldRetrievingFactoryBean用來獲得目標(biāo)類的靜態(tài)Field,或者目標(biāo)Bean的實(shí)例Field。獲得的值可注入給其他Bean,也可直接定義成新的Bean。FieldRetrievingFactoryBean使用FieldRetrievingFactoryBean獲取Field值時,必須指定如下兩個屬性值:targetClass或targetObject:分別用于指定Field值所在的目標(biāo)類或目標(biāo)對象,如果需要獲得Field是靜態(tài)Field,則使用targetClass指定目標(biāo)類;否則使用targetObject指定目標(biāo)對象。targetField:用于指定目標(biāo)Field的Field名。FieldRetrievingFactoryBeanFieldRetrievingFactoryBean的本質(zhì)就是以聲明式方式來獲取Field值方法。例如:<beanid="theAge3"class= "org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> <propertyname="targetClass"value="java.sql.Connection"/> <propertyname="targetField"value="TRANSACTION_SERIALIZABLE"/></bean>上面配置相當(dāng)于執(zhí)行如下代碼:theAge3=java.sql.Connection.TRANSACTION_SERIALIZABLE獲取方法返回值通過MethodInvokingFactoryBean工廠Bean,可將指定方法返回值注入成目標(biāo)Bean的屬性值,MethodInvokingFactoryBean用來獲得指定方法的返回值,該方法既可以是靜態(tài)方法,也可以是實(shí)例方法。獲得的方法返回值既然可被注入到指定Bean實(shí)例的指定屬性,也可以直接定義成Bean實(shí)例。獲取Bean實(shí)例的方法返回值當(dāng)需要獲取Bean的實(shí)例方法返回值時,需要指定如下三個屬性:targetObject:確定目標(biāo)Bean,該Bean可以是容器中已有的Bean,也可是嵌套Bean。targetMethod:確定目標(biāo)方法,確定獲取目標(biāo)Bean哪個方法的返回值。arguments:確定調(diào)用方法的參數(shù)值。獲取靜態(tài)方法返回值如果需要獲取靜態(tài)方法的返回值,則無需指定targetObject,但需要指定目標(biāo)class,指定目標(biāo)class的屬性通過targetClass屬性。使用靜態(tài)方法注入,需指定如下三個屬性:targetClass:確定目標(biāo)class。targetMethod:確定目標(biāo)方法,確定獲取目標(biāo)class哪個方法的返回值。arguments:確定調(diào)用方法的參數(shù)值。MethodInvokingFactoryBeanMethodInvokingFactoryBean的本質(zhì)就是以聲明式方式來調(diào)用任何方法。例如:<beanid="sysProps"class= "org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <propertyname="targetClass"value="java.lang.System"/> <propertyname="targetMethod"value="getProperties"/></bean>上面配置相當(dāng)于執(zhí)行如下代碼:sysProps=java.lang.System.getProperties();強(qiáng)制性初始化Bean配置Depends-on屬性可以強(qiáng)制實(shí)例化屬性Bean。如:<beanname=“name”/><beanname=“person”depends-on=“name”> <propertyname=“name”> <reflocal=“name”/> </property></bean>基于Schema的簡化配置由于Spring框架專注于使用XML配置來驅(qū)動Java代碼。因此Spring配置文件往往很龐大,Spring框架則一直致力于配置文件的“瘦身”,其中提供例如兩個命名空間的簡化配置:使用p命名空間。使用util命名空間。使用p命名空間<beanid="chinese"class="org.crazyit.app.service.impl.Chinese"
p:age="29"p:axe-ref="stoneAxe"/>使用util命名空間constant:該標(biāo)簽用于將指定類的靜態(tài)Field暴露成一個Bean實(shí)例。它是FieldRetrievingFactoryBean的簡化配置。property-path:該標(biāo)簽用于將指定Bean實(shí)例的指定屬性(即getter方法返回值)暴露成一個Bean實(shí)例。它是PropertyPathFactoryBean的簡化配置。list:該標(biāo)簽用于定義定義容器中的List集合,并支持通過list-class屬性指定List集合的實(shí)現(xiàn)類。set:該標(biāo)簽用于定義容器中的Set集合,并支持通過set-class屬性指定Set集合的實(shí)現(xiàn)類,map:該標(biāo)簽用于定義容器中的Map集合,并支持通過map-class屬性指定Map集合的實(shí)現(xiàn)類properties:該標(biāo)簽用于加載一份屬性文件,并根據(jù)加載的屬性文件創(chuàng)建一個PropertiesBean實(shí)例。SpringELSpring的SpEL可以單獨(dú)使用,可以使用SpEL對表達(dá)式計算、求值。SpEL主要提供了如下3個接口:ExpressionParser:該接口的實(shí)例負(fù)責(zé)解析一個SpEL表達(dá)式,返回一個Expression對象。Expression:該接口的實(shí)例代表一個表達(dá)式。EvaluationContext:上下文。Expression實(shí)例Expression實(shí)例代表一個表達(dá)式,它包含了如下方法可用于計算、得到表達(dá)式的值:ObjectgetValue():計算表達(dá)式的值。<T>TgetValue(Class<T>desiredResultType):計算表達(dá)式的值,而且嘗試將該表達(dá)式的值當(dāng)成desiredResultType類型處理。ObjectgetValue(EvaluationContextcontext):使用指定的EvaluationContext來計算表達(dá)式的值。<T>TgetValue(EvaluationContextcontext,Class<T>desiredResultType):使用指定的EvaluationContext來計算表達(dá)式的值。而且嘗試將該表達(dá)式的值當(dāng)成desiredResultType類型處理。在XML配置中使用SpELSpEL的一個重要作用就是擴(kuò)展Spring容器的功能,允許在Bean定義中使用SpEL。XML配置文件和Annotation中都可以使用SpEL。在XML配置文件和Annotation中使用SpEL時,都需要在表達(dá)式外面增加#{}包圍。SpEL語法詳述(上)直接量表達(dá)式。5+4/3-2在表達(dá)式中創(chuàng)建數(shù)組。newint[6]或者newint[]{2,4}在表達(dá)式中創(chuàng)建List集合。{ele1,ele2,ele3...}在表達(dá)式中訪問List、Map等集合元素:為了在SpEL中訪問List集合的元素,可以使用list[index]格式、訪問Map集合的元素,可以使用map[key]格式。在SpEL中調(diào)用方法與在Java代碼中調(diào)用方法沒有任何區(qū)別。與JSP2EL類似的是SpEL同樣支持算術(shù)、比較、邏輯、賦值、三目運(yùn)算賦等各種運(yùn)算符,類型運(yùn)算符:SpEL提供了一個特殊的運(yùn)算符:T(類名),這個運(yùn)算符用于告訴SpEL將該運(yùn)算符內(nèi)字符串當(dāng)成“類”處理,避免Spring對其進(jìn)行其他解析。SpEL語法詳述(下)調(diào)用構(gòu)造器:SpEL允許在表達(dá)式直接使用new來調(diào)用構(gòu)造器,這種調(diào)用可以創(chuàng)建一個Java對象。變量:SpEL允許通過通過EvaluationContext來使用變量,該對象包含了一個setVariable(Stringname,Objectvalue)方法,該方法用于設(shè)置一個變量。自定義函數(shù):SpEL允許開發(fā)者開發(fā)自定義函數(shù)。類似于JSP2EL中的自定義函數(shù),所謂自定義函數(shù),也就是為Java方法重新起個名字而已。安全導(dǎo)航:在SpEL中使用foo.bar語句時可能導(dǎo)致NullPointerException,因此可以寫成foo?.bar?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 愛心轉(zhuǎn)贈活動方案
- 環(huán)保杯售賣活動方案
- 珠寶店春節(jié)活動方案
- 生育關(guān)懷募捐活動方案
- 甘肅省青聯(lián)活動方案
- 班級制作壽司活動方案
- 珠寶店婦女節(jié)活動方案
- 煩惱互助活動方案
- 玉石砍價互助活動方案
- 服飾2個人合伙人協(xié)議書范文
- 企業(yè)信息化建設(shè)與管理咨詢合同
- 國家開放大學(xué)電大《基礎(chǔ)寫作》期末題庫及答案
- 2025年中考作文試題預(yù)測及范文
- 中間人介紹工作合同模板
- 第3章-機(jī)床夾具
- 侵入性操作相關(guān)感染防控
- 江蘇省鎮(zhèn)江市近五年中考作文題目及2024年中考作文指導(dǎo)及例文
- 2024年譯林英語三年級上冊Unit1 第1課時 (教學(xué)課件)Cartoon time
- 2019級藥劑專業(yè)人才培養(yǎng)方案(中職)
- L07G324鋼筋混凝土密肋樓板
評論
0/150
提交評論