Spring課堂筆記講解_第1頁
Spring課堂筆記講解_第2頁
Spring課堂筆記講解_第3頁
Spring課堂筆記講解_第4頁
Spring課堂筆記講解_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一篇:Spring概述1、Spring框架內(nèi)核IoC(InverseOfControl):反轉(zhuǎn)控制。AOP(AspectOrientedProgramming):面向切面編程。2、Spring的體系結(jié)構(gòu)3、Spring開發(fā)所需的資源主spring-framework-3.0,2,RELEASE-dependencie^zip 2013/1/420;52主spnng-framework-3,2^RELEASE-distzip上 2013/1/317:W/ \/ 依賴的jz咆Sp「ing官■方的開發(fā)包:jar、doc、sr特蜘坦(因卜RELE然EEd5P而g-fraEeworkTNQRELE*E卜共享.副景 新建交I也名都慘改日期大小docs■?文檔:手冊、APIlibsschema_Iicense.txt-名都慘改日期大小docs■?文檔:手冊、APIlibsschema_Iicense.txt-noiice.brt]1rMdfne.txtASpring的a泡>xsd均束文檔2012/12/137:462015/9/2111:5€2O12/U/137:462012/12/13734201^/12/137;:242012/12/137:24文件夾文件夾文件夾文本文檔文本文檔,一Jj_■?■一"“a---T-1KB第二篇:Spring核心之loC(控制反轉(zhuǎn))1、拷貝核心jar包:logging'l.ll.jcom.spnng5ourcerorrions.logging'l.ll.jspring-beans'3.2.0.RELEASE.jarspring-context-3.2.0.RELEASE.jarpispring-core-3.2.0.RELEASEjarspring-expression-3.2.0.RELEASEJar依賴pispring-core-3.2.0.RELEASEjarspring-expression-3.2.0.RELEASEJar依賴SpringCore2、loC的概念:主動壹被動,控制權(quán)發(fā)生了新移主動壹被動,控制權(quán)發(fā)生了新移,這就叫做ToCSeMte實現(xiàn)自己創(chuàng)津Dm實例對零.控利權(quán)在自取上主動行為.pubfticclassXXX'&erviceJrnp]impterneritsXXXServkejprivateUwrD^ouserOaopublicvoki「egi5ttMurserDao.sawO;publicda3UseHDaatmpIimplementUse<Dao{publicvoidsave{X//執(zhí)行JDK保存陋依觸:1.U整出日口接口/k2VUwrDaolmpEEBj^i^展供Tsette訪法publk:void^tUserDao(UsdrDiM!u^erDao){thk.us?rDao-userDao;}被動接受3、資源交給Spring管理建立spring的配置文件:EE叵a、schema約束文檔資料位置EE叵二電追星QQ+RELEASES卜fipring-l^atWfewdc-3.2.0.REIJEASE,docs*spring-fraffiewodc-ireferwice*htitil?1A名稱 “ 修改日期 競型 大小spring.tld.html 2012/12/137:3S Chrome HTMLD... 47 KB^pring-appendice5.html 2012/12/137:38 Chrome HTMLD... 2 KEF5pring-core.html 2012/12/137:33 Chrome HTMLD... 5 KB?spring-dsta-tier.html 2012/12/137:38 Chrome HTMLD... 4 KBFwpring-foEtldhml 2012/12/1373S C-rome HTMLD... 223 KEgspring-integratiaruhtEl 2012/12/137:38 Chrome HTMLD.? 4 KB苜spring-introductiDri.htrnl 2012/12/137:38 Chrome HTMLD... 4 KEgspring-雌b,html 2012/L2/137:3S Chrome HTMLD.? 4 KBspring-what5-new.html 2012/L2/137:38 Chrorne HTMLD... 2 KB時忸氏ng.html 2012/12/137:3SChromeHTMLD.? 213KEtran&sctiar.hbYil 2012/12/1373S Chrorne HTMLD... l&l KEftvalkdation.lrtml 2012/12/13738 Chrome HTMLD... lift KE時vfewhml 2012/12/1373S Chrome HTMLD.^ 171 KEFweb-integration.htinl 2012/12/137:3S Chrome HTMLD... 31 KE■,、Fxsd-config.hftml三708 匚hr口m電HTKJIn 口耳k口_,開▼刻錄新重點域月蘭nfiq.html 2C12.12/13733T.2D15/9/?19:03b、schema引入后xml沒有提示的解決方案xmlcaxmlcaXMLCatalogMyEclipse】匚中LiFilesandEditorsXMLXMLCatalogEntriesS(|XMLC]<箱;UserSpecifiedEntries玩PluginSpecifiedEntriesc、把DAO實現(xiàn)交給Spring容器(Map結(jié)構(gòu))管理c?xrilverfcsicin=r'J.0irencoding=J,,l/rF-gJ,,?><!--發(fā)行包::spring?framework-3,2,0,RELEA£E\@0£515p「iriR?f「anieH0iEk?「ef€r'Enc:ethtnnl\KFd?CQ|nfiiE?html■■>< n鼻Killns=11ttp;//wmj,fpkingfr-Qm^MQrk「scjhemfl/bec?ns?xmln5;M5i=rahttp;//eh?m3.。產(chǎn)g/20&1/XMLScfrefflcr-i門51即£?"xsi:5chemaLocation="Bhttp://^wrspHnff/roflfeworA,org/5c/?ew/beanjhttp://wwwB5pringframe^rk,org/sche^/beans/^pring-beans.xsd,B><!--sprdn請理的:閩原Man:定文二個賁麻在5prin晉禮所有^^兼叫l(wèi)iftManid:輪亮誦Bl的翎招碓一f1。=垓瑜摸全名<beanid="user-D^o^class^^cfl.itcast,sprir?glaC.User'DaoI^pt"*/></beans>從Spring容器中獲取資源a、把核心jar包加入到classpath中

UserDaoImplH/b</beans>4、依賴注入:DI(DependencyInjection)b、啟動Spring容器“應用puihlic.亡工2App(publ£.£.st:ariif ]jiiPgS){//ApplitatioriConitaxt:SpringSiS//ClassPathXmlApplicatiorirCont'e-Kt;IESS件在仁工融融更th中ApplicationContextac胃fibhClasslPathXjmlUserDaoImplH/b</beans>4、依賴注入:DI(DependencyInjection)b、啟動Spring容器“應用puihlic.亡工2App(publ£.£.st:ariif ]jiiPgS){//ApplitatioriConitaxt:SpringSiS//ClassPathXmlApplicatiorirCont'e-Kt;IESS件在仁工融融更th中ApplicationContextac胃fibhClasslPathXjmlApplicationContext('"cn/itc.ast/spring/_D1loC/beart,xml11)jUserDaouserDao=(UserDaoJac.ge七吁sain( "技瞪渤1從與pring哥法中融!虎遇ubsrDaoasave()j<I--發(fā)行包:spring-frairtewdrk-3a2.0.RELEASE\do<:£\spring-framework-referenceXhtmiJlXxs-d-configthtml<bean5xmlns="http"http://5Prirorg/5c■片《所口/Sscjfts;wxmIns:x,i="http w3,org/2&&l/XMLSc/few?a-irrstance"xsiischemaLDcatioin=Hhttp://www,springframeiM/schema/beansh七七p; spr~if?g//Str/iema/beans/iprirrgf-beans.xs€/,T>pirgpertzy:通運屬性[寫屈性與etitep方法)注入name:思性鈉ref;弓|用酈1個匕電白內(nèi)5、Spring核心類或接口核心接口:ApplicationcontextClassPathXmlApplicationContext:加載位于classpath中的spring配置文件。FileSystemXmlApplicationContext:加載位于本地磁盤上的 spring配置文件。<propertynam@^"ref=lpwserDa,ow></property></beanycbeanid^^wserDao"c1ass=,-cn-<tcast.springr_02DI.U5*rkbidlrrH^AddEMihzI|」*e占5|^iftg.i!SrCirCft/fci5t1,SprifiqJC,nU^C11!b*ir"ml EMeiui WdltbAiKhHeLdhSou^rRdertc*-N1Kv*g?rieDrchftriertMkItsfBun Ocsigrwii白-b?flri#nJ罵"KU時川職4七1即><versio*i=,'Ii&"ertcodityptEH^r1pwt情陶壯/je£刀口上條「£『pparlinfor。府ngRjesciurctBuilde-f-sA*vaBuikiPaihJj^aCodtEtJe/RddUbmiyJmbBuildPah1Su410向西”4.bbririwJARaanddfF an141buildpaih:UMrUMI,UtiiiLibraiiiri++cam.ipringBauic?LCiguap?h?.Dammi->pr^g-b?n-1.2jO.RELEAbE.jM-D:\R£L£ASJ“W—3ns7aiJlRELEi^f.jjr-DARE*一1kprngcarB^ZjO.RELEA&EJai■以±REL£工QL**>prir^-?xprntiran-^J.ILREl.EA5Ej?r-比J^EJSdMt部librarytoadd1o<dw網(wǎng)也.AddUtafiry.-"*廿5¥即加工碑兄174,UUL.El<beanid=**userSerwtcet¥class=Ncn.itcast,spring._&2DI.UserS^^iceI^plw>UserLibr即H.了解:BeanFactory和Applicationcontext獲取Bean的區(qū)另1J在加就配置文件附,Stt吧配罡嬸的bzan買例化7AppliLuliuri<utiLyxLat=rruwCly^^PtrLliXmlApplicationContext(Mcn/itcast/spring/02DI/be口n?乂/1");UserDacuserDao=(UserOao)ac.getBean(,buserDaoM)j,LjserDac.save()j/,拉正加載:用到的^偎才會實例化Resourceresource=mewClassPathResourcet''cn/itcast/5pring/_02DI/be3n.xml,h);BeanFactorybeafiiFactory=newXmlBeanFactory(resource);UserDaouserDao=(UserDsio)beanFsctoryBgetBean(,hui5erDaoM)juserDao.saveOi6、Bean的初始化方式一:使用默認的構(gòu)造方法。(推薦,重點)注意:Bean要有默認的構(gòu)造方法<!--使用默認構(gòu)苣方些例化bemn--><beanid="beanl"class=lfcn?itcast.spring.GSinit.Beanl,rX/bean>方式二:靜態(tài)工廠方法初始化(遺留老系統(tǒng))V91*W-W?.,—?JW>-mF=■尸. V■j^g■■*V V" 、J//老系統(tǒng):靜態(tài)工廠口u’ri仁亡1日5亨 i《B電日riFact□廣yfpublicstaticBean2getBean2(){returnnewBean2();}<!--使用靜態(tài)工廠的方法產(chǎn)生been匚la”:靜杰工廠類名factory-method:創(chuàng)建bean的靜態(tài)方法名稱一■><beanid=ubean2"class=Mcn*itcc?st.spring StaticBeanFactory'*factory-method="getBean2"/>方式三:實例工廠方法初始化(遺留者系統(tǒng))7/老系統(tǒng):實例工廠publicclassInstanceBeanFactory(publicBean3getBean3(){returnnewBeanB();})<!-使用實打虹廠的方法產(chǎn)生bw3n--><beanid="instanceBeanFact&ryw "cn.itcast.spring._03init,InstancedeartFactctry1*/><beanid=wbean3wfactcry-method=ngetBean3"factory-bean-,rii?stanceBeanFactcry"X/bean>

7、bean的存活范圍<bean的scope屬性>:取值:singlton(默認值):單例的。在spring容器中實例只有一個。prototype:非單例的。用的時候都會創(chuàng)建新的對象。request:請求范圍。(只能用在web環(huán)境下)session:會話范圍。(只能用在web環(huán)境下)■ 產(chǎn)FFF¥a』產(chǎn)?Sr!lTy|J■WFMiPffWIRr<*-rVF甘/XLFriFMJ* 1產(chǎn)*>taFFy-lur%.ufFI'-ra- ¥<E--軾/腌碉:sin£jLton^ <bean "class=ricnsitcast.spring._£c°P&- "scope= 1></bean><!-- prototype■<bean1<^=’『£|@曰門2"clas5=Jjcn.itcc?st.sprfng*_04scope.Bean2,rscope="prototype1></bean>8、bean的生命周期有關(guān)配置為玷-meth口d:指定初始化時要執(zhí)行的方法。初始化方法執(zhí)行一次6€三±「口了-巾白七八口6:指定消毀5口「:1口€容器時,bEan要執(zhí)行的稍毀方法.只適含單例模式<beanid="beanl"class="cn.itcast.spring._05LifecycLe.Beanl"init-method=11aa"destroy-method=f,bb"/>public/電■*[public/電■*[匕ue±dm日工11〔£1:尸工11且[J曰「g5)(bc=neuCLassPathXml^ijpplicatimCtHntext("cn/itcast/spriog/_&5Lifecyc1e/beantxml");bc=neuCLassPathXml^ijpplicatimCtHntext("cn/itcast/spriog/_&5Lifecyc1e/beantxml");Beanlbeanl=(Bednl)at.getBean("bean1!!);beanl^daSonftethLinigf);b日32.d口&口好th1口虱);ac.£lose()-,/*闈印rdHg客迷9、依賴注入:重點9.1通過構(gòu)造方法注入id="bw刖["clsss=n.iteflst.springr_06D!High,Bean!N><!-給構(gòu)宣方法注入壁披ind也乂:指定.輜晾引位孟type品混爹煎的類母value:注入的樂Strin葭逗棱毅姍,且能弱自咖S微哪接如果不指定ind石乂和typ-是由酉造順序決定的,容易出得--><con5tructoi"=argirdex-hlnvalue-type=r,int^X/constructorarg><constructoi"=argindex=N6Wvalu€="出單攀"type=,hjavn.Long.String^X/constructor-arg>R/bean>

9.2setter屬性注入:重點publicclass {privateStringname;privateintage;privateBean3bean3jpublicBe3nmgetBeanB(){returnbean3;}publicvoidsetBean3(Bean3bean3){this_bean3=beanB")publicvoid£etNam?(Stringname){=name;}publicvoidsetAge(intage){this.age=age;}日^OverridepublicStringtoString(){return"Bean?[name=*'+name+",age="+age+}\--屬性注入-->id="becm2”二19三三="七門.ii:七口5七.spring 工High.HegnN"><proper,tyname="name"value="^^"></property><proper,tyname="age,lvalue="39"></property><!--注入弓I用類型:使用口慈<proper,tyname="bean3"ref="bean3"></property></bean><!--把hean3交給spring管理--><beanid="bean3"class="cn.itcast.spring._06DIHigh.Bean3"></bean>9.3p名稱空間:p名稱空間的支持:1、引入空間:xmlns:p="http://www.springframeworkTorg/schema/p**2、屬性值的注入:基相陛和St「in弟 p:屬性名稱=“值”引用類型:P:屬性名稱bean的名字”--><bean= class=Jlcn.itcast.spring._06DlHigh.Bean2ftp:ndme="切摸第"p:age=>r5911p:bean3-ref=Nbean3,7>

9.4SpEL:SpringExpressionLanguage<!--5pEL:基本語法并{5pEL}<beanid="bean22"class-"cn,itcast.spring._06DIHigh,Bean2"><propertyname=,Fnamer,value=Fr#fFj^iWf/,,></pr,operty><properizyname="age"value="69"></property><propertyname=^bean3rjvalue="#{bean3)"X/property></bean>I _9.5注入數(shù)組或集合privateString[]arrs;privateList<Strirg>list;privateSet<String>set;privateMap<StringjString>mapjprivatePropertiesprops]publicvoidsetProps(Propertiesprops)(ps=props;}publicvoidsetMap(Map<String,String>map){this.map二map;}publicvoidsetSet(Set<String>set){this.set=setj)publicvoidsetList(List<String>list){this,list=list;}publicvoidsetArrs(String[]arr5){this.arrs=arrs;}publicvoidprint(){System*outsprintln("Array:"+Arrays,as£ist(arrs))jSystem.out.println("List:"+list);System.oof.println(+,Set:"+set);System.out.println(1,map:"+map);System.out.println(''props:11+props);

<1--數(shù)組或隼合的注入<beanid="bean4"class="cn.itcast.spring._Q6DIHigh.Bean4"><!--數(shù)組注入元鎏<propertyname="arrsrr><array><value>aa</value><value>bb</value><value>cc</value>5/array></property><!一生入List赭一><propertyname="tistM><list><value>aaa</value><value>bbb</value><value>ccc</value></property>JI ,%__,-L^-=fc 、<(--注入£2七元素一》<propertyname="set"><set><value>aaaa</value><value>bbbb</value><value>cccc</value></set></property><!——注入Ma際素<propertyname=rtmapfl><map><entrykey="aHvalue="aaaaaH/><entrykey="b"value="bbbbb"/></map></property><!--p「ope廣ties的內(nèi)容;keyvalue-<propertyname=,lprops*'><props><propkey=1raa">aaaaaa</prop><propkey-,fbbrj>bbbbbb</prop></props></property></bean>10、團隊開發(fā)按模塊編寫spring配置文件。

<beansxmln£="htt, /sch&mp/beans"xmlns:p="http://wjflM./schema/p"xmlns:xsi="http://gw.\/20dl/XMLSchema-instance"xsi:schemaLDcation="http:/./schema/beans. 一亡七戶;//^^?5人/^日日,尸叮小二的廣?+。,q/寫chema/beons/spring-beans.Xsd"><!一主/孟文南二> i<importresourcesftbean-modeLI,xmL"/><import.「g5011廣(:日三“52口門-用口£/212.乂m1”『士</beans>注意事項:同一個xml文件中不能出現(xiàn)相同id名稱的bean多個xml文件可以出現(xiàn)id相同名稱的bean,后導入的配置的會覆蓋前面的配置。fe?1產(chǎn)*/*vrrrrr■3產(chǎn)ar'HfJ1r5Jrrw『r%■■vr——!■■—“ryyjwfr/—產(chǎn)■—J"ry1”斗wf?一?d3f<1-i喇用如酸中的id的特性“唯一前提:多個S?置文件中有相同1鄴b-n,且當前不適宜修成它的茗字,遹過談由田科睡新的名稱name:也可以1靛bw日由名林*多個信用誨號制意。--><beanid=rrbeanl"name=TIbblfbbllfbblll"clas5=wcn.it^ast.spring._07mjLtTXmL.Beanl^y<propertyname=''name"value="modeproperty></bean>11、使用注解11.0概述作用:替代xml作為配置文件。注解VSXML注解:優(yōu)點開發(fā)直觀,開發(fā)效率高。缺點硬編碼。XML:缺點開發(fā)效率低,麻煩。優(yōu)點運行期間可配置。11.1Spring中使用注解進行配置a、jar包:還是使用核心的5個jar即可b、spring配置文件指定bean的搜索路徑

一<beansxmlrs=(*/?ttpr//wLvwJ/scherna/beans11xmlns:p="http://ww^.spritiQframehrork*org/schema/p"xmlns:xsi="httpr///2001/XMLSchema-instance"|Kmlnr;二口武丁式七=://2舊.Bprinqfr口所啟.sg/"正時口/七加£。)斗xsi:schemaLocations"http: .spr'ingfrtuneh/or'/schema/be□ns/schema/beans/spring-beans.xsdhttp"/hnw.EpringfranezoNi.白廣^/士亡卜左前仃/用力門之金/七http://hMW.springfram^M/scbema/contejct/spring-context.xsrf">3<1--給導P「in由首宅強<context:component-scanbase-package=wcr?.itcost.springT_Q8annotation(7></beans>c、實例化資源^Component/A0=i-F;<beanid="beanl''顯于寶自cntitcast*spring._08annotation+Beanl,hX/bean>publicclassBeanl(privateStringname;publicStringgetName(){returnnmme;11.2常用的注解資源管理:方式一:?Component:把bean交給spring容器管理。默認bean的名稱就是類名首字母小寫方式二:?Component的衍生注解,主要用在三層架構(gòu)開發(fā)中?Controller:表現(xiàn)層使用,一般動作類上@Service:業(yè)務層使用?Repository:持久層使用資源注入:方式一:@Autowired:自動注入required屬性:默認值是true。注入失敗,拋出錯誤說找不到對應的 beanfalse:注入失敗,拋NullPointerException?Qualifier:指定要注入的bean的名稱。要配置@Autowired來使用@Value:注入基本類型數(shù)據(jù)和 String按類型自動注入的注意事項:注入屬性類型為class如果類名(簡單類名)對應的類只有一個,注入成功如果類名(簡單類名)對應的類有多個,注入失敗注入屬性類型為interface

如果不存在對應接口的實現(xiàn)類,注入失敗如果對應接口的實現(xiàn)類為一個,注入成功如果對應接口的實現(xiàn)類為多個,注入失敗方式二:?Resource:功能和@Autowire是類似的。默認按照類型進行注入。此注解是 Spring框架對JSR-250的支持。@Autowire和?Qualifier可以按照指定名稱進行注入; @Resource(name="bean的名稱";@ComponentpublicclassCustomerServicelmplimplementsCustomeriServic&{77^Autowired//@Qualifier("customsrDao11)■II@Resqu廣ce//默認按照類理進行注入 (口日me="工ustcun曰uDac")privateCustomer-DaocustomerDao;publicvoidregist(){customerDao.save();))生命周期有關(guān)注解://生命周期有關(guān)的注解@ComponentpublicclassBe3nl{//初始化方法|?PostConstructpublicvoidaa(){System.out.printin(11aaa......1);}//i肖毀方法@PreDestroypublicvoidbb(){System.out.println(Mbbb ;}針對老系統(tǒng),bean是由工廠創(chuàng)造的

//zrgConfiguration//指定當前類為酉造類publicclassFactory{$Bean(name=nb2(,) //說明產(chǎn)生的是一個bf日n,并取名為b2publicBean2getBean2(){returnnewBean2();12、Spring中使用JUnita、導入jar包新增一個jar包:spring-test-320.RELEASE.jarb、如何使用單元測試門野預先蜀l£p「in瞬弱1?RuhWith(Spir,ingJUniit4Cla£sRijnner.class)//設置單元副i加勺基運行5£.SContextCoAfiguration(locations=l,,,classpathscm/itcast/spring/_02juinit/bean,xml,i,)//l^Spr,iri^'0jg^:ffpubpublic*1酬8■寫11510印田『3!&尸丫1,£婦丁史5七i@AutQwired注入被廝it的買凰pr1〃&金?■Cust口me「與mpmic:e匚u三七dine「52「yi匯注入被廝it的買凰@TestpublicvoidtestREgis1:(){CuS.tOnierSi&rviee.regist()J第三篇:Spring核心之AOP(面向切面編程)1、代理模式靜態(tài)代理:代理類已經(jīng)寫出來了,實實在在的存在的。動態(tài)代理:(Spring采用的)運行期間生成的,內(nèi)存中的類。基于接口的動態(tài)代理:JDK代理,Proxy。編譯時快,運行時慢?;谧宇惖膭討B(tài)代理: CGLIB。編譯時慢,運行時快導入cglib的jar包:Spring框架用的代理:目標類實現(xiàn)了某個接口,用JDK代理;目標類沒有實現(xiàn)任何接口,用CGLIB代理。

2、通過一個事務管理案例,理解什么是 AOPThreadLocal:線程局部變量.當前線程放的對象,只有當前線程能取。簡單模擬該類的代碼:publicclassThreadLocal<T>;privateMap<Runnable,T>map=newHashMap<RunnablerT>():publicvoidset(Tt){map,put(Thread.currentThread0,t):}publicTget(){map.get(Thread*currentThread()):}publicvoidremove(){map.remove(Thread.currentThread());AOP的好處:h使程序員專注于實現(xiàn)業(yè)務可拔插式開發(fā),不會修改原來的代碼3、AOP編程思想把切面問題在運行時織入到業(yè)務代碼中,這就是AOP把切面問題在運行時織入到業(yè)務代碼中,這就是AOP編程傳筑開發(fā)業(yè)務代碼改變切面問題I 1傳筑開發(fā)業(yè)務代碼改變切面問題I 1專注于業(yè)務代碼,不考慮切面問題;切面問題都寫到公用的代碼;運行期間把切面公用代碼織入到業(yè)務代碼中(核心技術(shù):動態(tài)代理);4、Spring中AOP的概念連接點(Joinpoint):連接點指類中的方法。切入點(Pointcut):切入點指被抽取了共性功能的方法。通知(Advice):這些被抽取出來組成獨立代碼邏輯的共性功能稱為通知。通知類別:前面、后面、返回后、最終、異常、環(huán)繞。弓I入(Introduction)目標對象(TargetObject):目標對象指包含切入點的類對象AOP代理(AOPProxy)織入(Weaving)切面(Aspect):指被抽取了共性功能的方法(切入點)與被抽取了共性功能(通知)對應的綁定關(guān)系。關(guān)心的某一方面(比如:事務、日志、效率方面)AOP開發(fā)流程:5、基于XML的AOP搭建AOP的Spring環(huán)境基于Spring的IoC核心的。a、拷貝必要的AOPjar包spring-aop-320.RELEASE.jar

spring-aspects-3.2.0.RELEASE.jar(對aspectJ的實現(xiàn)).aspectj.weaver-1.6.8.RELEASE.jar一注day34_D3_5pringAOP£src■hJRESystemLibrary[JavaSE-1,6]?-spnng_aop:\RELE^s\ccre'嬴.aopalliance-l^O.Ojar-r-二_E二?-:.方口昌.aspec^.weaver-l.S.B.RELEASEjar-D:\l遙sprirg-aop-3.2.0.RELEASE.jar■D:\RELEASES\springJars\aopi^1spring-aspects-3h2.0.RELEASEjar □pringjar^:\RELE^s\ccre/&初ing_gr呂呷comHSpringsourceHorgHapachexommonsJogging-Ll.l.jar--

函spring-beans-S^nOnRELEASEjar-D:ELEr--二,◎口1門匚:」&“弓二匚

扇spring-context-S.2.O.RELEASE.jar-D:\RELEASES\springJars\<@spring-core-3,2,0.RELEASEjar-D:\RELEA£E£\5pring_jar5\cciD砌spring-ejcpression-3?2,0,RELEASEjar■D:\RELEASES\springJab、編寫核心業(yè)務代碼(制定連接點).〃核心業(yè)務publicclassCustomerService{publicvoidsave(){System,out.printIn("CustomerServicesave?}publicvoidupdate(){System,out.println("CustomerServiceupdate}c、通知制作:切面公用代碼//通知:切面的公用華碼〃&jviu(通知)。戰(zhàn)者叫增強publicclassTransacticnAdvice(publicvoidstartTransection(){System.out.println("開啟事務");)publicvoidcommit(){System,out.ppintIn("提交事務”);}d、Spring配置文件

4bean<3-4bean<3-xmlns= //nww.^pringfrGmcwGrh.. schrma/beans切入點表達式<|-- 靜cutiqn(幅胃麗is萬法jig回審日-就-萬法鈿^^購利累)|--><r,哪m,,><aop:beforerwthod=r,startTransactLohr,[一一口;|<aop:beforerwthod=r,startTransactLohr,[一一口;|3比千口廣€rf*e]hod="stdrtTransaction"mI?「一步舟!fe嘲血-1■<anp::bwfcir*iM>thod="stjrtlransaction”<aap::b二干口r?iwthod-"Et=rtlran-saction"<aop:bfFQr^-ifcethod-"&tflrtTrsn?acti^n"^pintciJt^^executionf^oidpoiritcut=*extcuticMii(voidpointcut-^cxi^curtionCvoidpojntq*eMpeurttiora(void艮02nt£?t-"execvtion(voidcn,itc-ast.s.pring?.CustomerService))■"/>■■>c.n.itcast?spring,_OLA*-CustcmerService*s^ve(intjjav.s.Iding<aop:befo^i*eth&d=nstartlpansactionr!g$int$;.U.t--execijitiarii(^oidcn. *{..)>"/>--<aop;beforenethodi=n£tartr?rtS£rctton"point£ut="'execu11 *eJikiteMitmE0廣 14DP』,cn.itcast.tpiring._01AQP.CustoniErSizrvic*.&jvq(intu..))"/>cnritost;spring._ftlAtM*.Cy^toffitfrSGiirvicv,號.hf(T-})-/>-->cn..itcast,sp尸工fir,rCvstcwerService,*vs.( -->切入點的定義形式逐級應用范圍放大<aop:beforemethod="s<aop:beforemethod="startTransactionit= *cn.itca5t.spring._01ACN:ia.*.¥f..))w/>特點:復用性差<1-定義切入點,飆一個名稀一》<aop:pointcutexpre&5ion="execwtionf*cnrTtcajt,spring.02AOP..*P*(..id="ptlH/>ZI--通知類型:前面執(zhí)行methadj推行國拓照中的哪個方法pointcut:指定切入點{|目前切sav。<aop:beforemethod=tartTrransactton"口01|"11七11七-「已f='1'口土工平》特點:針對該切面具備復用性V!一進行AOPB地貴一<aop:confie>j《!一羲切入點,給定一個名稱--> "|《aop:p口inttu比總tp廣總s■弓iiSii="白龍皮亡葉]:白1口t匕.土口.*力自.g』£OP\一*f.口,J-id=:"p七7"/)<(--BiSiJIS-><aop:aspectref="tmduice"?仃一,通知類出土前面執(zhí)行methods執(zhí)行通毗申的酬個方法pointcut:指定切入點(<aop:beforemetlhad='"stcrrtlrGnsoction'rpointcut-ref=irptl"/></aop:aspect</aopieanfig>特點:多個切面共用5.4通知類型幫助理解的(實際上就是一個環(huán)繞通知代碼 )"V(.Tr日rLaautiQnMmn日ger工5±c?廣亡,『/日門,口二七:口門()■由總thod.invoke(占,白rgm);由總thod.invoke(占,白rgm);beforeTransactionMmit();大}catch(Exceptione){TransactionManager.roLLback();e.printStackTrace();}finally{TransactionManager.r^iea£e();,),returnnull;afterRetumrigaftarThrowingafterbefore:after-returning:after-throwing:after:<aop:aspect^f="t^Advzce',>!-before;前置通知。在切入點方法前的行--〉vwcjp:beforemethod= Tr-tinsection"pointcut=^executionf*cn,itcast?spring+_02AtiviceType+*+save(,.+))"1--after-returning:.在切入點返回她行.如果根心讓野代S(原始代即出出了異和詢1知不會同行二->aop:after-returningmethod="ccwmnitMpointcuts'^xecutionf*cn□itcost.spring._02AdviceType.*.sa^e(.I--after-throwing:出現(xiàn)異常時進行通知。-->aop:after-throwingm@thod=aroLLback11pointcut="executionf*cn.itcast.spring._92AdviceType.^^save(.^))''f-m代電口:魁通知,不管忠也持它都會執(zhí)行一》<aop:aftermethods"reLease"pointcut="execution(*cn.itcast.spring._02AdviceType.*.sgvb(..,)"/》</aop:aspect>環(huán)繞通知:around

//環(huán)績通知,功能非常建大。//原始/弓(即論核心:哮代碼>三在哪里,就在哪里執(zhí)行」 //運行期間:5P廠1口底把原蛤代碼封裝到Pf。匚&&dingJoinFoint對盤市publicvoidaround^HroceedingJoinHointpjp)t//獲取原才制弋碼并調(diào)用try(System,oi/f.printin("aroundbefore ");ce&d()-System.otjt.println("aroundafterreturning }catch(Throwablee){System.out*printin("aroundafterthrowing*.**.");e*printStackTrace();}finally{System.out+printing11aroundafter}6、注意:多個前面的通知的執(zhí)行順序<aop:config>w箕p「巨與與icin二”總k色已utiQfi「卡匚門,£七c口寫士■.互pr足ft耳-_01Adhice.*,合口期£(,-〉J"id=r'ptlRr/><!='學不前罡通知時;口比>京件的Ifi席為耀Q5七廣架的欄鬣霞=一|<aop:&spectre+=MIoguflltfviceB,><aop:beforemethods pointcut~ref=irptl"/>V/gQp二名弓<aop:aspect「€千="》<aap:beforemethod=MstartTransaction"ppointcut-ref=nptln/></aop:aspect></aop:conifig>7、獲取原始方法的參數(shù)和返回值P己CKmge(_ri._LLLd、L*spfifflg._tJZMUV±CMlBgb!〃核心業(yè)務 一:publicclassCustomerservice{publicvoidsave(Stringnamejintage){System.out.printIn("CustomerServicesave>>publicStringfimd(){System.out.printIn(^CustomerServicefind,.??");i return”發(fā)現(xiàn)了一條新記錄”;,}}I原始方法前面執(zhí)行的通知:beforearound(before)使用場景:在原始方法執(zhí)行前,利用前置通知 獲取參數(shù),進行一些判斷、校驗等功能。/在公用代碼中f通知}”出原始方法的希數(shù)和返回值■ublicclassMyAdvicel{//我取嬖數(shù)是有意義,獲即返回(fi是沒有意即//Pinpoint:9p「in娛把原始方法夠故等信息封裝至陽象中.如果還要傳久其他參敕,詢對象心須位于第一個位置publicvoidbefore(loinPointjp){Stringparaml=(String)jp.getArgs()[0];intparam2=(integer)jp+getArgs()[!];System.outprinting"MyAdvicelbefore拿至晾抬方券麴:”+「日戶口巾工:":"+p日尸門山2);System.out.printIn("MyAdvicelbefore}publicvoidaround(Proceeding]oinPointpjp)throwsThrowable(Stringparaml-(String)pjpTgetArgs()[0];intparamZ=(integerjpjp.getArgs()[1]JSystem.out.printlnf"MyAdvicelaround罕至晾始方繆徽;114-paraml+":1'+par,am2)\Systeni.out.printin(nMyAd\ficelaround.....n);ceed();<b?anidl=5tDfiwrSe/*wice,rcla55=*icfl『itcast- ng._MJSduiceArgisPCystoufflerSerwi.eebpan><b^:anid=MrtfyArfvtr^I11class="ci^,£teast.spring;_&2AdviceAr^gs. cellT></b-ean><aop:conifig><aop:a&pectref="mydduiceln><aop:beforemethad=^before"pointcLit='"executiafif*cn.itccrst.springvice4rgst*.sai/ef..))*'/><aap:aroundmethod= pointcut= C"打.itccrst,spr1ingP_ P**Bsavef,,))《/△也戶:白&p電</aoprconfig>beans>原始方法執(zhí)行后的通知:after-returningaround(afeter)使用場景:在原始方法執(zhí)行后,利用后置通知獲取原始方法的返回值, 進行一些功能上的改變。after-returning獲取返回值:<!--Spring把原蛤方揚返回信我AS<]了returnin徵疑的短中--)<aop:afterreturningmethod="after"「Eturningu"r七*ctLme"fjointuuizn“EJcecMtiorrC*cn.itcast.spring._02AdviceArgs.-、+、<通知:7/茨取原始方法的返回值 ///通知的方法的翎中就必須定義該堂里 /publicvoidafter(5tringrtValue){System.o(jt_println("MyAdvicel白ftu爨取了原始方海^返回值:"+「七匕l(fā)u。;System.out.printin("MyAdvicelafter.....,1);)around獲取返回值:<aop:aroundmethod="orounJlwpointcut=Nexegrutionftcn.£tccrst.spr£iig._e2^lc/vice^rg5u^\find(..JJ'7>通知:publiuuci'daroiyidl(Pr0,ee?jjnglciinPointpjp)throasThrowabluf |StringrtValue=(String)ceedQ;System+out.printIn("MyAdvicelaround n+rtValu€)j在通知中獲取產(chǎn)生的異常:after-throwing<1--在圖題中不取厚好方生產(chǎn)生的-><aop:after-throwingmetihodl= rrhrowf"thrxjwings^e"painttut=*exectrtion(*cjiHitct.s/srf._e24di/£ce^r^s-*tt/pdctef..))//獲取原始方法調(diào)用時產(chǎn)生的異常publicvoidafterThrowing(Throwablee){System,out.printin("MyAdvicelaterThrowing,..."+e.getMessage())System.out.printin("MyAdvicelaterThrowing}?8、SPring中使用注解配置 AOPa、在Spring配置文件中增加以下內(nèi)容<beansxmlins= spPiwg/rcriHewoF'fa.arg/seows1Mxmlns::xsi=Hhttp;//.wwwPm3rorg/2091『XMLS匚方封jwcj-instsnce口xmlns:aop=Nhttp;//j^ww.springframeMrk、org/schenta/oop"xsi:5chemaLocation="rhttp springframework-or^g/scherna/beanshttp:〃whfl#?sprif?g/r£7iflewt?/sc^eFflcr/beGrts/spring-b'eQrts.xsd1http://wwW/schema/aop/sch&ma/aarp/spring-aop?xsJIbeariiid= tomerServiceMclass=-l,cnBiteast.spring._02Advic&Args.CustomerServiceH></bean>u--?7i.d="用yUdL]匚白工"仃Ir55="1門.itcerst-spring,_02Ad\ficeArgs.MyAdvicel?></bean>aop:aspectj-autoproxy/></b,tearii^b、常用注解@Aspect:指定切面@Before@After@AfterReturning@AfterThrowing@Around|gA嚴cut"觸蜘 |publicclassMyAdvicel(N在通裕中苜糧指定切入點離法式//@Before("execution(*un-itcast>springB annotationAOP=CustonerService?save(*.))")//publicvoidbefare(){//Systemi-out.println("MyAdvicelbeforeB.■一//1.//@After("'executionf*cnBiteast*spring._03annotationAOPaCustDmeirServicetsave(*8))")//publicvoidafterf){// SysterrnaoutBprint1n("MyAdvicelafter."}形式一指定通用的切入點//定義切入點,寫到一個方孟上,透方轉(zhuǎn)有返回值和萋數(shù)i?Pointcut("execution(*cn.itcast.spring■_?3annotationAOP.Customerservice.sav?(..publicvoidptl(){)@Before("MyAdvicel,ptl()")publicvoidbefore(){SystemaouttprintIn(''MyAdvicelbbefore-..*-11)j)^After("MyAdvicel.ptT(尸)publicveldafter(){System,outtprintIn(''MyAdvicelaafterB----")j)}c、多個前置(或其他)通知的執(zhí)行順序按照通知方法名稱的字母排序$Befcre("MyAdvicel.ptl()")_publicvoidbeforel(){System.out.printlnf"MyAdvicelbbeforel^Before("MyAdvicel.ptl()'*) |publicvoidbefore(){ —~ ISystem.out.println("MyAdvicelbbefore第四篇:數(shù)據(jù)庫訪問及事務管理1、Spring中的JDBC只是對JDBC編碼進行了薄薄的封裝,不是框架。類似工具的應用DBUtil。是一種DAO設計模式2、導入jar包目前只是用:SPring+JDBC(暫時不管Hibernate的事情)-12Jmy?ql-connertor-Java-5.0.8-bin.jar]spring*Jdbc*3.2.O.RELEASE.jar-12Jmy?ql-connertor-Java-5.0.8-bin.jar]spring*Jdbc*3.2.O.RELEASE.jar■a]spring'tx-3.2.0.RELEASE.jar529KB392KB236KB2007/10/423:112012/12/137352012/12/137:35ExecutableJarFileExecutableJarFileExecutableJarFile3、Spring提供了一個JDBC操作模板JdbcTemplate:類似DButil中的QueryRunner方式一:publicclassUserDaoImpl1implemen'tsUserOaQ{,內(nèi)朝L條數(shù)據(jù)publicvoidsave()(DriverMaragerDataSourcedataSource=newDriverManagerDataSource();//設置敝據(jù)庫的隹按dataSource,setDriverClassHameC"com.mysql.jdbc,Driver");dataSource.setUrl(Njdbc:mysql;///day35");dataScurce-setU£ernama("root"');dataSource.setPasswor*d(bbsorryb,);JdbcTemplateJdbcTemplate=newJdbcT?mplat)5jdbcTemplate.setDataSource(dataSource);jdbcTemplate.execute{"insertintousers(name^age)values('aaa1f10)");<!--方式一:設有即用一<beanid="userDaolr,class=,rcn.itcast.spring._01Advice.UssrDaoImpLlITx/bean>方式二:publicclassUs@rDacIinpl2ImplemQn'tfiU導色「口口口(privateJdbcTemplatejdbcTemplate;publicvoidsetJdbcTemplate(JdbcTemplatejdbcTemplate){this,jdbcTemplate=jdbcTemplate;)//插入一條數(shù)據(jù)publicvoidsave(){jdbcTemplate.execute(11insertintousers(namejage)values(1bbb1j10)")j})<!一方式二:有些卵用<beani.d=tiuserDao2**class="cn.itcast.spring._&lAdvice.UserDaoImpl2,l><propertyname="JdbcTernpLate"「日千=尸Late"X/property〉</baan><!--定義JDBC梗板<beanid="jdbcTemplate*1class="org.springfrafnetn/ork.jdbc.core.JdbcTemptate*t><propertyname="dataSource"ref="c/atcjSource"X/property></bean>方式三:public 5hUs&rDaoIrflplBextendsJdbcDaoSupportimplementsUserDao(,,播入一條勤據(jù)publicvoidsave(){getJdbcTennplete(),execute("insertintousers(namejSge)values(pccc1,10)");)} 口耳統(tǒng)計橫式<[--方式三:日后經(jīng)常用-><be^n class=Mcn.itcast.spriic€,UserDaoImpl3"><propertyriame=r,dataScnjrcer<ref=^dataSource*rX/property></bean>4、Spring中的數(shù)據(jù)源常用的數(shù)據(jù)源Spring數(shù)據(jù)源實現(xiàn)類DriverManagerDataSource:Spring內(nèi)部的《be副口id-'VotoSour-ce spring/rGHneworfc,jdbc, ^erAfoncpgerDfltaSowrce">prnpprtyname="d「iverCIassWcrme"valuer”仁cwm,mysqt,jdbc,DriverX/property>prqpertyname="urlv^lue=rrjdb匚:mysql:///day350></property>propertynaniE=*'usernamerrvs1ue=lrrootar></property>propertyname="possword"valus=iTsorryH></property></bean>/IhiA-i產(chǎn)%DBCP數(shù)據(jù)源BasicDataSource拷貝dbcp的jar包:commons-dbcp.jarcommons-pool.jar<!--DBCP數(shù)據(jù)源<b@anid=rfdata5ourc&DBCPJJcla^s=9torgsapach&.commons.dbcp.BasicDataSourcEN><propertyname=^driverClassjVaw11valuer"com,mysqiBjdbcBDriverwX/property><propertyname=*Fwr,lwvalue="jdbc:mysqL:///day35^></property><propertyname=^LrserniJmea"value=rProot"></property>^propertyname-^password“value-"sorryHX/property></bean>C3P0數(shù)據(jù)源 ComboPooledDataSource拷貝c3p0的jar包:<1--門P微據(jù)調(diào)--><beanid=Mdatc?SGwrceC5P0--class=Hcaffl>mchcxnge,v2.c3p0+ComboPoderfDataSowJ'ce*><propertyname= yerCIassuvalue=婚匚otj.砂sqI.jdbc.Dri”》</property>propertyname=MjdbcUrl"value=^jdbc:nys(jt:///day35u></property>property

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論