經(jīng)典框架spring介紹課件_第1頁
經(jīng)典框架spring介紹課件_第2頁
經(jīng)典框架spring介紹課件_第3頁
經(jīng)典框架spring介紹課件_第4頁
經(jīng)典框架spring介紹課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Spring-javaEE的春天預(yù)習(xí)檢查根據(jù)你的理解,“依賴注入”是什么?根據(jù)你的理解,談?wù)劇耙蕾囎⑷搿边m于在項(xiàng)目中應(yīng)用嗎?你理解的“面向方面編程(AOP)”是什么樣的?Spring框架的內(nèi)容和作用?掌握SpringIOC的原理掌握SpringAOP原理本章目標(biāo)Spring之父RodJohnsonSpringFramework創(chuàng)始人,interface21CEO豐富的c/c++背景,豐富的金融行業(yè)背景1996年開始關(guān)注Java服務(wù)器端技術(shù)Servlet2.4和JDO2.0專家組成員2002年著寫《Expertone-on-oneJ2EE設(shè)計(jì)與開發(fā)》,改變了Java世界技術(shù)主張:技術(shù)實(shí)用為本音樂學(xué)博士Spring的綠草叢Spring:輕量級容器,JavaEE的春天,當(dāng)前主流框架目標(biāo):使現(xiàn)有技術(shù)更加易用,推進(jìn)編碼最佳實(shí)踐內(nèi)容:依賴注入容器,AOP實(shí)現(xiàn)(聲明式事務(wù)),DAO/ORM支持,Web集成ScopeautoWire如何開發(fā)一個(gè)打印機(jī)?

打印機(jī)功能的實(shí)現(xiàn)依賴于墨盒和紙張。步驟:1、定義墨盒和紙張的接口標(biāo)準(zhǔn)。2、使用接口標(biāo)準(zhǔn)開發(fā)打印機(jī)。3、組裝打印機(jī)。4、運(yùn)行打印機(jī)。怎樣使用依賴注入A4B5彩色墨盒雙色墨盒怎樣使用依賴注入定義組件接口墨盒接口:Ink紙張接口:Pager使用接口開發(fā)打印機(jī)publicinterfaceInk{publicStringgetColor(intr,intg,intb);}publicinterfacePaper{publicstaticfinalStringnewline="\r\n";/***輸出字符到紙張*/publicvoidputInChar(charc);/***得到輸出到紙張上的內(nèi)容*/publicStringgetContent();}publicclassPrinter{ publicInkink=null; publicPaperpaper=null; publicvoidprint(Stringstr){ System.out.println("使用"+

ink.getColor(255,200,0)+"顏色打印"); for(inti=0;i<str.length();++i){//逐字符輸出到紙張

paper.putInChar(str.charAt(i)); } System.out.print(paper.getContent());//將紙張的內(nèi)容輸出 }}我們在開發(fā)打印機(jī)時(shí),使用了Ink和Paper接口。但并不關(guān)心其實(shí)現(xiàn)。ink和paper何時(shí)被實(shí)例化呢?組裝打印機(jī)依賴注入:組裝打印機(jī)A4B5雙色墨盒彩色墨盒<beanid="printer" class="com.wepull.demo.Printer"><propertyname="ink"ref="colorInk"/><propertyname="paper"ref="a5Paper"/></bean><beanid="colorInk"class="com.wepull.demo.ink.ColorInk"/><beanid="greyInk"class="com.wepull.demo.ink.GreyInk"/><beanid="b5Paper"class="com.wepull.demo.paper.TextPaper"><propertyname="charPerLine"value="6"/><propertyname="linePerPage"value="5"/></bean><beanid="a4Paper"class="com.wepull.demo.paper.TextPaper"><propertyname="charPerLine"value="10"/><propertyname="linePerPage"value="8"/></bean>怎樣使用依賴注入4.運(yùn)行打印機(jī)publicstaticvoidmain(String[]args){ ApplicationContextcontext= newClassPathXmlApplicationContext( "applicationContext.xml"); //由Spring創(chuàng)建printer對象,并根據(jù)配置文件注入 //依賴的組件,完成組裝 Printerprinter=(Printer)context.getBean("printer"); printer.print("幾位輕量級容器的作者曾驕傲地對我...");}配置為使用greyInk、a4Paper時(shí)的運(yùn)行結(jié)果通過Spring:我們可以象更換打印機(jī)的墨盒和打印紙一樣地更換程序組件。這就是依賴注入帶來的魔力!!配置為使用colorInk、b5Paper時(shí)的運(yùn)行結(jié)果項(xiàng)目中應(yīng)用依賴注入使用依賴注入組裝原有系統(tǒng)actionbizdao依賴依賴XDAOxDAO= newXDAOJdbcImpl();將組件的實(shí)現(xiàn)類硬編碼以前的系統(tǒng)自從有了依賴注入...privateXDAOxDAO=null;publicvoidsetXDAO(XDAOdao){ xDAO=dao;}不再依賴具體實(shí)現(xiàn)類。通過setter方法運(yùn)行時(shí)注入。<beans><!--DAO--><beanid="userDAO" class="...UserDAOJdbcImpl"/><!--Biz--><beanid="userBiz" class="...UserBizImpl"><propertyname="userDAO" ref="userDAO"/></bean></beans>現(xiàn)在的系統(tǒng)小結(jié)1.A,B,C,D,E組件其中A依賴B,C,B依賴D,E2.DAO切換實(shí)現(xiàn)(JDBC/Hibernate)面向方面編程(AOP)Spring帶來的好處:讓我們可以“專心做事”依賴注入(IOC/DI)編寫程序時(shí)不用關(guān)心其依賴的組件面向方面編程(AOP)將程序中涉及的公共問題集中解決怎樣實(shí)現(xiàn)的呢?哪些“方面”需要關(guān)注:publicvoiddoSameBusiness(longlParam,StringsParam){

//記錄日志("調(diào)用doSameBusiness方法,參數(shù)是:"+lParam);

//輸入合法性驗(yàn)證if(lParam<=0){thrownewIllegalArgumentException("xx應(yīng)該大于0");}if(sParam==null||sParam.trim().equals("")){thrownewIllegalArgumentException("xx不能為空");}

//異常處理try{...}catch(...){}catch(...){}

//事務(wù)控制mit();}我們構(gòu)建系統(tǒng)的目的是解決業(yè)務(wù)問題在編碼實(shí)現(xiàn)業(yè)務(wù)邏輯前,需要先解決如此繁多而且復(fù)雜的多個(gè)方面的事情注意力被分散了,業(yè)務(wù)代碼質(zhì)量得不到保障這些方面又都是不可或缺的,絕不能丟開不管這正是AOP要解決的問題,F(xiàn)ollowme!怎樣才能“專心”做事?怎樣使用AOP使用AOP方式實(shí)現(xiàn)日志系統(tǒng)業(yè)務(wù)介紹:將業(yè)務(wù)邏輯層每個(gè)方法的調(diào)用時(shí)間和參數(shù)輸出到控制臺AOP思路:分別編寫業(yè)務(wù)邏輯代碼和“方面”代碼,運(yùn)行時(shí)再組裝1、編寫業(yè)務(wù)邏輯接口和實(shí)現(xiàn)類,不用關(guān)心“方面”2、編寫方面代碼,實(shí)現(xiàn)特定Advice接口3、將“業(yè)務(wù)邏輯代碼”和“方面代碼”組裝進(jìn)代理類4、運(yùn)行AOP涉及概念Target:目標(biāo),被代理的bean,包含業(yè)務(wù)代碼Advice:通知,定義一個(gè)“方面”要實(shí)現(xiàn)的功能。分前置通知、后置通知、環(huán)繞通知和異常通知等類型。Proxy:代理,加入了通知或切面的目標(biāo),最終通過代理類訪問業(yè)務(wù)邏輯,將“業(yè)務(wù)邏輯代碼”和“方面代碼”組裝進(jìn)代理類

Pointcut:切入點(diǎn),切入點(diǎn)決定了一個(gè)特定類的特定方法是否滿足一條特定的規(guī)則,即在哪些地方使用通知

Advisor:切面,切面是由定義切面行為的通知和定義切面在什么地方執(zhí)行的切入點(diǎn)組合而成小結(jié)AOP目標(biāo):專心做事AOP原理將散布在系統(tǒng)中的公共功能集中解決AOP實(shí)現(xiàn)采用一個(gè)機(jī)制 1.將復(fù)雜的需求分解出不同方面 2.專心做事 3.組裝起來運(yùn)行小結(jié)Spring的AOP機(jī)制在方法調(diào)用前、后、環(huán)繞或拋出異常時(shí),“織入”方面代碼通過代理訪問被代理的類環(huán)繞通知方法執(zhí)行前置通知后置通知代理原Bean通知(Advice)小結(jié)在線購書系統(tǒng)中,要求不修改BookBizImpl代碼的情況下增加如下功能:對買書的用戶進(jìn)行返利:每買一冊書返利3元。即:每調(diào)用一次buy方法打?。骸癧銷售返利][時(shí)間]用戶名:返利3元?!碧崾荆?.返利是在購書成功后進(jìn)行的,因此應(yīng)該使用后置通知。2.后置通知范例:publicclassRakeOffAdviceimplementsAferReturningAdvice{publicvoidafterReturning(ObjectreturnValue,Methodm,Object[]args,Objecttarget)throwsThrowable{//TODO:yourcodehere}}總結(jié)Spring包含哪些內(nèi)容?IOC的好處是?Spring怎么實(shí)現(xiàn)IOC?“面向方面編程”的好處是?Spring怎么實(shí)現(xiàn)AOP?IOC容器、AOP實(shí)現(xiàn)、DAO/ORM支持、Web集成分離組件的使用和實(shí)現(xiàn)添加帶參構(gòu)造器或getter/setter器,使用配置文件組裝將“方面”分離出來,寫代碼時(shí)只需關(guān)注當(dāng)前業(yè)務(wù)邏輯在方法調(diào)用前、后或拋出異常時(shí)“織入”方面代碼聲明一個(gè)切入點(diǎn)一個(gè)命名切入點(diǎn)可以在<aop:config>元素中定義,這樣多個(gè)切面和通知就可以共享該切入點(diǎn)。<aop:config> <aop:pointcutid="daoPointcut"expression=“ execution(public*com.wepull.print.bean1.*.printer(..))"/></aop:config>AspectJ表達(dá)式語言名字模式匹配的是方法名。參數(shù)模式:()匹配了一個(gè)不接受任何參數(shù)的方法,(..)匹配了一個(gè)可以接受任何數(shù)量參數(shù)的方法(包括零個(gè))(*)匹配了一個(gè)接受一個(gè)任何類型的參數(shù)的方法(.String)匹配了一個(gè)接受兩個(gè)參數(shù)的方法,第一個(gè)可以是任意類型,第二個(gè)則必須是String類型AspectJ表達(dá)式語言execution()execution()是最常用的切點(diǎn)函數(shù),如下例:通過方法簽名定義切點(diǎn)execution(public**(..))匹配所有目標(biāo)類型的public方法。第一個(gè)*代表返回類型,第二個(gè)*代表方法名,而..代表任意入?yún)⒌姆椒āxecution(**To(..))匹配目標(biāo)類所有以To為后綴的方法。第一個(gè)*代表返回類型,而*To代表任意以To為后綴的方法。AOP配置<beanid="time"class="com.wepull.print.bean.Interceptor"></bean><aop:config><aop:pointcutid="daoPointcut“ expression="execution(public*com.wepull.print.bean.*.printer(..))"/><aop:aspectid="myAspect"ref="time"><aop:beforemethod="beforTime"pointcut-ref="daoPointcut"/><aop:aftermethod="afterTime"pointcut-ref="daoPointcut"/></aop:aspect></aop:config>事務(wù)(Transaction)Spring使用AOP來完成聲明式的事務(wù)管理,因而聲明式事務(wù)是以方法為單位,Spring的屬性自然就在于描述事務(wù)應(yīng)用至方法上的策略,在Spring中事務(wù)屬性有以下四個(gè)參數(shù):傳播行為隔離級別只讀提示事務(wù)超時(shí)期間在Spring中聲明SessionFactory一種簡單的配置方式,即指定Hibernate配置文件路徑即可:<!--配置sessionFactory--><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="configLocation"><value>classpath:hibernate.cfg.xml</value></property></bean><!--配置事務(wù)管理器--><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"><refbean="sessionFactory"/></property></bean>事務(wù)管理的AOP配置<!--配置事務(wù)的傳播特性--><tx:adviceid="txAdvice"transaction-

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論