版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
高級依賴配置與SpEL講師:李剛本次要點PropertyPathFactoryFieldRetrievingFactoryBeanMethodInvokingFactoryBeanSpring提供的Schema簡化配置Spring3.0提供的SpELSpring框架本質(zhì)在Spring配置文件中使用XML元素進行配置,實際上驅(qū)動Spring執(zhí)行相應的代碼。例如:使用<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也為這種語句提供了對應的配置語法:調(diào)用getter方法:使用PropertyPathFactoryBean。訪問類或?qū)ο蟮腇ield值:使用FieldRetrievingFactoryBean。調(diào)用普通方法:使用MethodInvokingFactoryBean。Spring框架本質(zhì)是什么?它可以讓開發(fā)者無需書寫Java代碼就可進行Java編程,當開發(fā)者采用合適的XML配置進行配置之后,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>上面配置文件的實質(zhì)相當于執(zhí)行如下代碼:theAge=person.getSon().getAge();獲取類或Bean的Field值通過FieldRetrievingFactoryBean類,可以將指定類或Bean的field值作為屬性值注入。FieldRetrievingFactoryBean用來獲得目標類的靜態(tài)Field,或者目標Bean的實例Field。獲得的值可注入給其他Bean,也可直接定義成新的Bean。FieldRetrievingFactoryBean使用FieldRetrievingFactoryBean獲取Field值時,必須指定如下兩個屬性值:targetClass或targetObject:分別用于指定Field值所在的目標類或目標對象,如果需要獲得Field是靜態(tài)Field,則使用targetClass指定目標類;否則使用targetObject指定目標對象。targetField:用于指定目標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>上面配置相當于執(zhí)行如下代碼:theAge3=java.sql.Connection.TRANSACTION_SERIALIZABLE獲取方法返回值通過MethodInvokingFactoryBean工廠Bean,可將指定方法返回值注入成目標Bean的屬性值,MethodInvokingFactoryBean用來獲得指定方法的返回值,該方法既可以是靜態(tài)方法,也可以是實例方法。獲得的方法返回值既然可被注入到指定Bean實例的指定屬性,也可以直接定義成Bean實例。獲取Bean實例的方法返回值當需要獲取Bean的實例方法返回值時,需要指定如下三個屬性:targetObject:確定目標Bean,該Bean可以是容器中已有的Bean,也可是嵌套Bean。targetMethod:確定目標方法,確定獲取目標Bean哪個方法的返回值。arguments:確定調(diào)用方法的參數(shù)值。獲取靜態(tài)方法返回值如果需要獲取靜態(tài)方法的返回值,則無需指定targetObject,但需要指定目標class,指定目標class的屬性通過targetClass屬性。使用靜態(tài)方法注入,需指定如下三個屬性:targetClass:確定目標class。targetMethod:確定目標方法,確定獲取目標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>上面配置相當于執(zhí)行如下代碼:sysProps=java.lang.System.getProperties();強制性初始化Bean配置Depends-on屬性可以強制實例化屬性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:該標簽用于將指定類的靜態(tài)Field暴露成一個Bean實例。它是FieldRetrievingFactoryBean的簡化配置。property-path:該標簽用于將指定Bean實例的指定屬性(即getter方法返回值)暴露成一個Bean實例。它是PropertyPathFactoryBean的簡化配置。list:該標簽用于定義定義容器中的List集合,并支持通過list-class屬性指定List集合的實現(xiàn)類。set:該標簽用于定義容器中的Set集合,并支持通過set-class屬性指定Set集合的實現(xiàn)類,map:該標簽用于定義容器中的Map集合,并支持通過map-class屬性指定Map集合的實現(xiàn)類properties:該標簽用于加載一份屬性文件,并根據(jù)加載的屬性文件創(chuàng)建一個PropertiesBean實例。SpringELSpring的SpEL可以單獨使用,可以使用SpEL對表達式計算、求值。SpEL主要提供了如下3個接口:ExpressionParser:該接口的實例負責解析一個SpEL表達式,返回一個Expression對象。Expression:該接口的實例代表一個表達式。EvaluationContext:上下文。Expression實例Expression實例代表一個表達式,它包含了如下方法可用于計算、得到表達式的值:ObjectgetValue():計算表達式的值。<T>TgetValue(Class<T>desiredResultType):計算表達式的值,而且嘗試將該表達式的值當成desiredResultType類型處理。ObjectgetValue(EvaluationContextcontext):使用指定的EvaluationContext來計算表達式的值。<T>TgetValue(EvaluationContextcontext,Class<T>desiredResultType):使用指定的EvaluationContext來計算表達式的值。而且嘗試將該表達式的值當成desiredResultType類型處理。在XML配置中使用SpELSpEL的一個重要作用就是擴展Spring容器的功能,允許在Bean定義中使用SpEL。XML配置文件和Annotation中都可以使用SpEL。在XML配置文件和Annotation中使用SpEL時,都需要在表達式外面增加#{}包圍。SpEL語法詳述(上)直接量表達式。5+4/3-2在表達式中創(chuàng)建數(shù)組。newint[6]或者newint[]{2,4}在表達式中創(chuàng)建List集合。{ele1,ele2,ele3...}在表達式中訪問List、Map等集合元素:為了在SpEL中訪問List集合的元素,可以使用list[index]格式、訪問Map集合的元素,可以使用map[key]格式。在SpEL中調(diào)用方法與在Java代碼中調(diào)用方法沒有任何區(qū)別。與JSP2EL類似的是SpEL同樣支持算術、比較、邏輯、賦值、三目運算賦等各種運算符,類型運算符:SpEL提供了一個特殊的運算符:T(類名),這個運算符用于告訴SpEL將該運算符內(nèi)字符串當成“類”處理,避免Spring對其進行其他解析。SpEL語法詳述(下)調(diào)用構(gòu)造器:SpEL允許在表達式直接使用new來調(diào)用構(gòu)造器,這種調(diào)用可以創(chuàng)建一個Java對象。變量:SpEL允許通過通過EvaluationContext來使用變量,該對象包含了一個setVariable(Stringname,Objectvalue)方法,該方法用于設置一個變量。自定義函數(shù):SpEL允許開發(fā)者開發(fā)自定義函數(shù)。類似于JSP2EL中的自定義函數(shù),所謂自定義函數(shù),也就是為Java方法重新起個名字而已。安全導航:在SpEL中使用foo.bar語句時可能導致NullPointerException,因此可以寫成foo?.bar?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 直郵廣告解決方案
- 二零二五年度房產(chǎn)租賃合同終止催告通知3篇
- 二零二五年度房地產(chǎn)物業(yè)管理合同范本5篇
- “銀色數(shù)字鴻溝”對老年人身心健康的影響
- “雙減”背景下學校課后服務質(zhì)量的問題、原因及策略
- 蜜雪冰城企業(yè)案例分析
- 四川省瀘州市龍馬潭區(qū)瀘化中學2024-2025學年九年級上學期1月期末考試化學試卷(含答案)
- 建設生物質(zhì)加工利用及年產(chǎn)3萬噸炭素資源化利用項目可行性研究報告模板-立項拿地
- 福建省廈門市同安區(qū)2024-2025學年八年級上學期期末模擬語文試卷(含答案)
- Unit5 Humans and nature Lesson 3 Race to the pole 說課稿 -2024-2025學年高中英語北師大版(2019)必修第二冊
- 監(jiān)理人員安全生產(chǎn)培訓
- 2024-2030年中國電力檢修行業(yè)運行狀況及投資前景趨勢分析報告
- 河北省百師聯(lián)盟2023-2024學年高二上學期期末大聯(lián)考歷史試題(解析版)
- 中央空調(diào)系統(tǒng)運行與管理考核試卷
- 核電工程排水隧道專項施工方案
- 2024年市場運營部職責樣本(3篇)
- 民辦學校招生教師培訓
- 煉鐵行業(yè)的安全生產(chǎn)與環(huán)境保護考核試卷
- 抗菌藥物的合理應用培訓
- 初三數(shù)學老師家長會發(fā)言稿
- 能源崗位招聘筆試題及解答(某大型央企)
評論
0/150
提交評論