動(dòng)力節(jié)點(diǎn)spring4講義_第1頁
動(dòng)力節(jié)點(diǎn)spring4講義_第2頁
動(dòng)力節(jié)點(diǎn)spring4講義_第3頁
動(dòng)力節(jié)點(diǎn)spring4講義_第4頁
動(dòng)力節(jié)點(diǎn)spring4講義_第5頁
已閱讀5頁,還剩150頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Spring4講第1 Spring概SpringSpring2003年興起的一個(gè)輕量級的Java開發(fā)框架,它是為了解決企業(yè)應(yīng)用開發(fā)的(AOP是一個(gè)分層的JavaSE/EEfull-stack(一站式)輕量級開源框架。 SpringSpring由20多個(gè)模塊組成,它們可以分為數(shù)據(jù) cesneraioAspectsrnn((Messan (estSpring的Spring官網(wǎng): 及Jar包說Spring非侵入SpringAPISpring框架快速的移植到其他框架,容控制反轉(zhuǎn)(InversionofControl,即創(chuàng)建被調(diào)用者的實(shí)例不是由調(diào)用者完成,而是由Spring容器完成,并注入調(diào)用者。ProgrammingOOPAOP編程思想的實(shí)現(xiàn)。Spring也提供了面向切面編程的第2 Spring與Control依賴查找:DependencyLookup,DL,容器提供回調(diào)接口和上下文環(huán)境給組件,程序代碼則需要提供具體的查找方式。比較典型的是依賴于JNDI系統(tǒng)的查找。Spring在依賴庫spring-framework-3.0.2.RELEASE- 解壓目錄下 log4jlog4j.jar。在依賴庫解壓下:\org.apache.log4j\.apache.log4j\1.2.15中的.apache.log4j-1.2.15.jarSpring基本編程,共需7Jar包即可。定義接口與實(shí)體類創(chuàng)建Spring配置件約束在%SPRING_HOME%\docs\spring-framework-reference\html\xsd-configuration.html文則需要將約束要查找的地址指向本地的xsd文件。相應(yīng)的xsd文件在Spring框架解壓目錄下的schema的相應(yīng)子中。spring-beans.xsdbeans子中查找相應(yīng)版本的約賴關(guān)系也是通過id屬性關(guān)聯(lián)的。定義測試類類有兩個(gè)。通過Ctrl+T查看:A、配置文件在類路徑下B、配置文件在本 若Spring配置文件存放在本地磁盤 中,則使用FileSystemXmlApplicationContext實(shí)C、配置文件在項(xiàng)目根路徑下Spring Xmleanacoy

Bean對象。兩個(gè)接口容器的區(qū)別StudentServiceImpl類的無參構(gòu)造器中A、 容器中對象的裝配時(shí)B、 容器中對象的裝配時(shí) Bean的過程,稱為Bean的裝配。默認(rèn)裝配方式舉例:ba01動(dòng)態(tài)工Bean實(shí)例,而不能像前面例子中似的,直接SpringBeanBean實(shí)例,就會(huì)使工廠類與要?jiǎng)?chuàng)建的Bean類耦合到一起。將動(dòng)態(tài)工廠Bean作為Bean使將動(dòng)態(tài)工廠Bean作為普通Bean來使用是指,在配置文件中過動(dòng)態(tài)工廠Bean后,測試類直接通過getBean()獲取到工廠對象,再由工廠對象調(diào)用其相應(yīng)方法創(chuàng)建相應(yīng)的目標(biāo)舉例:ba02使用Spring的動(dòng)態(tài)工廠SpringBean,有專門的屬性定義。factory-bean指定相應(yīng)的工廠Beanfactory-method指定創(chuàng)建所用方法。此時(shí)配置文件中至少會(huì)有兩個(gè)Bean的定義:工廠類的Bean,與工廠類所要?jiǎng)?chuàng)建的目標(biāo)類Bean。而測試類中不再需要獲取工廠Bean對象了,可以直接獲取目標(biāo)Bean對象。實(shí)現(xiàn)測試類與工廠類間的解耦。靜態(tài)工Bean,其不是由自己的類創(chuàng)建的,所以無需指定自己的類。但class屬性指定的是工廠類而非自己的類。當(dāng)然,還需要通過factory-method屬性指定工廠方法。舉例:ba03Bean的作用prototypegetBean方法獲取的同一個(gè)<bean的實(shí)例都是一globalsessionHTTPsession對應(yīng)一個(gè)Bean實(shí)例。典型情況下,僅在使用portlet集群時(shí)有效,多個(gè)Web應(yīng)用共個(gè)session。一般應(yīng)用中,global-session與session舉例:ba04Bean后處理BeanBeanBean在初始化時(shí),均會(huì)自動(dòng)執(zhí)行該無須id屬性。BeanBean對象,即是增Bean初始化完畢之前與之后執(zhí)行。它們的返回值為:功能被擴(kuò)展或增強(qiáng)后的Bean對象。Bean初始化完畢有一個(gè)標(biāo)志:一個(gè)方法將被執(zhí)行。即當(dāng)該方法被執(zhí)行時(shí),表示該BeanBean后處理器中兩個(gè)方法的執(zhí)行,是在這個(gè)方法之前之后執(zhí)行。這個(gè)publicObjectpostProcessBeforeInitialization(Objectbean,StringbeanId)throwsBeanceptionBeanBean實(shí)id屬性值。若Beanidname屬性值。ba05IServicesome()other()Bean:StudentServiceImpl與TeacherServiceImpl,均實(shí)現(xiàn)了IService接口。定制Bean的生命始舉例:ba06包。 以將ApplicationContext強(qiáng)轉(zhuǎn)為其實(shí)現(xiàn)類對象,或直接創(chuàng)建的就是實(shí)現(xiàn)類對象。Bean使Bean類可以獲取其在容器中的id名稱。factory),使Bean類可以獲取到BeanFactory對象。Step5BeanBeanPostProcessorStep6BeanInitializingBeanafterPropertiesSet()。該方法BeansetBeanBean實(shí)例Step8BeanBeanPostProcessorStep10:若BeanDisposableBeandestroy()。Step11:若設(shè)置了destroy-method方法,則執(zhí)行。舉例:ba07<bean/>的id屬性與name屬id名需要滿足XML對ID屬性命名規(guī)范:必須以字母開頭,可以包含字母、數(shù)字、注入分BeanBean對象的屬性進(jìn)行初始化。設(shè)值注入在Spring的依賴注入中大量使用。當(dāng)指定bean的某屬性值為另一bean的實(shí)例時(shí),通過ref指定它們間的關(guān)系。ref的值必須為某bean的id值。構(gòu)造注入index0開始。不過,該屬性不要也行,命名空間注入(了解入實(shí)現(xiàn)方式的不同,分為p命名空間注入與c命名空間注入。psetterc命名空間注入:采用構(gòu)造注入方式,故需要有相應(yīng)的構(gòu)造器(1)p命名空間設(shè)值注入對于設(shè)值注入,也可使用p命名空間的方式進(jìn)行注入。舉例:di02_01包Step1:修改配置文件頭,即添加相應(yīng)約束,在其中p命名空間。該約束在Spring框架解 中使用p命名空間中的屬性。p:bean屬性=“值” 說明:該值為普通值p:bean屬性-ref=“值” 說明:該值為其它beanId(2)c命名空間構(gòu)造注入對于構(gòu)造注入,也可使用c命名空間的方式進(jìn)行注入。舉例:di02_02包Step1:修改配置文件頭,即添加相應(yīng)約束,在其中c命名空間。該約束在Spring框架解壓\docs\spring-framework-reference\htmlsingle\index.html中。Ctrl+Fc-namespace進(jìn)行檢索。第一個(gè)檢索結(jié)果所的位置即有。 中使用c命名空間中的屬性。c:bean參數(shù)=“值” 說明:該值為普通值c:bean參數(shù)-ref=“值” 說明:該值為其它beanId集合屬性注入舉例:di03為數(shù)組注入值Set注入Properties對于域?qū)傩缘淖詣?dòng)注入對于域?qū)傩缘淖⑷?,也可不在配置文件中顯示的注入??梢酝ㄟ^為<bean/>設(shè)置byName方式自動(dòng)BeanidBean類的屬性名相同時(shí),可使用byNameBean注入給調(diào)用者BeanBean類的屬性名與配置文件的被調(diào)用者bean的id進(jìn)行比較而實(shí)現(xiàn)自動(dòng)注入的。byTypebeanclass屬性指定的類,Beanis-a關(guān)系(子類,或SPELSPEL,SpringExpressionLanguageSpringEL表達(dá)式語言。即,在Spring配置文件中BeanSPEL表達(dá)式計(jì)算的結(jié)果。SPEL表達(dá)式以#開頭,后跟一對大括號。用法:<beanid=“abc”value=“#{…}”/>。其文檔中有其用法舉例。在Spring框架解壓\docs\spring-framework-reference\htmlsingle\index.html中。Ctrl+FSpEL進(jìn)行檢索。第一個(gè)檢索結(jié)果中9.4.1所的位置即有用法舉例。舉例:di05使用內(nèi)部Bean注若不希望代碼直接某個(gè)bean,即,在代碼中通過getBean方法獲取該Bean實(shí)例,則可將該Bean的定義放入調(diào)用者bean定義的內(nèi)部。舉例:di06使用同類抽象Bean抽象Beanbeanbean在BeangetBean方法獲取的。設(shè)置true來指bean為抽bean認(rèn)值false過,該舉例:di07使用異類抽象Bean舉例:di08包為應(yīng)用指定多個(gè)Spring配置文件Bean數(shù)量也大量增加,導(dǎo)致配置文件變Spring配置文件分解成多個(gè)配置文件。(1)關(guān)系的配置文件(2)包含關(guān)系的配置文件引入。在循環(huán)遞歸包含。就本例而言,父配置文件不能匹配spring-*.xml的格式,即不能起名為基于注解的需要在原有Spring運(yùn)行環(huán)境基礎(chǔ)上再做一些改變,完成以下三個(gè)步驟。定 epty Oeve evicetler tlerBean的作用域基本類型屬性注入到setter上。按類型注入域?qū)傩孕枰谟驅(qū)傩陨鲜褂米⒔釦AutowiredBean的方式。settersetter按名稱注入域?qū)傩?與需要在域?qū)傩陨下?lián)合使用注解@Autowired與@Qualifier。@Qualifiervalue屬性用于指定要匹配的Bean的id值。同樣類中無需setter,也可加到setter上。行。若將其值設(shè)置為false,則匹配失敗,將被忽略,未匹配的屬性值為null。域?qū)傩宰⒔釹pringJSR-250規(guī)范中定義@Resource標(biāo)準(zhǔn)注解的支持。@Resource注解既可按類型注入域?qū)傩园疵Q注入域?qū)傩訠ean的生命始末@PostConstruct與與destroy-method等效。使用JavaConfig進(jìn)行配置(了解JavaConfigSpring3.0Spring中的。JavaConfig可以BeanSpringSpringXML文件,而是由程序員使用Java自己編寫的Java類。定義實(shí)體類容器來使用,用于完成Bean的創(chuàng)建。的Bean實(shí)例。A、byType方式的域?qū)傩宰詣?dòng)注入B、 方式的域?qū)傩宰詣?dòng)注定義Spring配置文定義測試類使用JUnit4測試Spring(了解使用Spring的JUnit4對Spring代碼進(jìn)試,將不再需要在程序的代碼中直接寫出創(chuàng)SpringSpringgetBean()JUnit4注解,junit-4.9.jarSpring框架的解壓SpringJUnit4Jar:定義被測試的定義Spring配置文定義測試類對于需要從容器中獲取的BeanbyTypebyName方式,將其自動(dòng)注入。然注解與XML共同使若注解與XML同用,XMLBean做修改,只需修改配置文件即可。當(dāng)然,此時(shí),Bean類要有setter或構(gòu)造器。第3 Spring與AOPStep1:項(xiàng)目Step2:項(xiàng)目Step3:項(xiàng)目以上的解決方案,也有一個(gè)弊端:若實(shí)現(xiàn)類還需要繼承其它類,就。因?yàn)镾tep4:項(xiàng)目所以,可以采用動(dòng)態(tài)方式。動(dòng)態(tài)是OCP開發(fā)原則的一個(gè)重要體現(xiàn):在不修改AOPAOPAOP(AspectOrientProgrammingOOP的一種補(bǔ)充。運(yùn)行期動(dòng)態(tài)實(shí)現(xiàn)程序功能的統(tǒng)一的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中 AOP容器的功能將切面織入到AOP編程術(shù)切面織入連接點(diǎn)切入點(diǎn)doOther()不被增強(qiáng),則doSome()為切入點(diǎn),而doOther()僅為連接點(diǎn)。final的方法是不能作為連接點(diǎn)與切入點(diǎn)的。因?yàn)樽罱K的是不能被修改的,不目標(biāo)對象的對象。即包含主業(yè)務(wù)邏輯的類的對象。上例中的StudentServiceImpl的對象若被增強(qiáng),則該類稱為目標(biāo)類,該類對象稱為目標(biāo)對象。當(dāng)然,通知MyInvocationHandler就可以理解為是一種通知。換個(gè)角度來說,通知定義了增強(qiáng)代碼顧問AOPAOP是由AOP一種編程思想,一套編程規(guī)范。而Spring是AOP這套規(guī)范的一種實(shí)現(xiàn)。所以,需要導(dǎo)入AOP的規(guī)范(接口)包及Spring對其的實(shí)現(xiàn)包。AOP包在Spring框架支持庫spring-framework-3.0.2.RELEASE-dependencies中SpringAOP的實(shí)現(xiàn)包在Spring框架的解壓包中:spring-aop-beans的約(Advice通知的用法步驟定義目標(biāo)類定義通知類目標(biāo)類通知切面工廠Bean類對象 參指定目標(biāo)對象的Beanid ”置,因?yàn)榇蜷_FactoryBean的源碼,可以看到其有個(gè)自動(dòng)檢測目標(biāo)類的所有接口屬性的動(dòng)態(tài)?!癷dvalueref。因?yàn)樵搶傩悦麨閤xxNames,是名稱,所以其值為字符串,而非對象??蛻舳藙?dòng)態(tài)對象在容器中的整體配置通知詳前置通知舉例:aop01_01包。 后置通知舉例:aop01_02包。環(huán)繞通知定義環(huán)繞通知,需要實(shí)現(xiàn)MethodInterceptor接口。環(huán)繞通知,也叫方法器,可舉例:aop01_03包。異常通知舉例:aop01_04包通知的其它用法給目標(biāo)方法織入多個(gè)切面 (Aspect顧問(Advisor)Spring提供的另一種切面。其可以完成更為復(fù)雜的切面織入功能。同類型,在不同的時(shí)間點(diǎn),將切面織入到不同的切入點(diǎn)。 名稱匹配方法切入點(diǎn)顧問代碼不用修改,只在配置文件中一個(gè)顧問,然后使用通知屬性advice與切入點(diǎn)的方法名mappedName對其進(jìn)行配置。中的切面,使用這個(gè)顧問即可。正則表達(dá)式方法切入點(diǎn)顧問自一個(gè)對象只能一個(gè)Bean,即如果有兩個(gè)Bean同時(shí)都要織入同一個(gè)切面,這時(shí),不僅要配置這兩個(gè)Bean,即兩個(gè)目標(biāo)對象,同時(shí)還要配置兩個(gè)對象。Spring提供了自動(dòng),用于解決FactoryBean的問題。常用的自動(dòng)生需要注意的是,自動(dòng)均繼承自Bean后處理器BeanPostProcessor。容器中所BeanBeanid屬性。所以自動(dòng)代理的Bean也沒有id屬性,客戶類直接使用目標(biāo)對象bean的id。advisor自動(dòng)合,生成對象。無需給做任何的注入配置。注意,只能與Advisor配合使用。 Bean是通知Advice。beanNames:指定要增強(qiáng)的目標(biāo)類的id對于Bean的名稱的指定,可以使用通配符*號。AspectJAOP切面編程。然而,AspectJAOP的功能,且其實(shí)現(xiàn)方式更為簡捷,使用更為方便,而且還支持注解式開發(fā)。所以,SpringAspectJAOP的實(shí)現(xiàn)也引入到了自己的框Spring中使用AOP開發(fā)時(shí),一般使用AspectJAspectJAspectJAspectJJava語言。AspectJAOP語法,它有一個(gè)專門的編譯器用來生成遵守Java字節(jié)編碼規(guī)范的Class文件。 AspectJ類AspectJ的切入點(diǎn)表達(dá)AspectJ除了提供了六種通知外,還定義了專門的表達(dá)式用于指定切入點(diǎn)。表達(dá)式的原 )切入點(diǎn)表達(dá)式要匹配的對象就是目標(biāo)方法的方法名。所以,execution表達(dá)式中明顯就指定只有一級包下的serivcedoSome()方法為切入點(diǎn)execution(**..service.*.doSome())指定所有包下的serivcedoSome()方法為切入點(diǎn)execution(*com.xyz.service.IAccountService.*(..))IAccountService若為接口,則為接口中的任意方法及其所有實(shí)現(xiàn)類中的任intjava.lang包下的類,可以直接使用類名,否則必須使用全限定類名,如joke(java.util.List,int)。joke()String,第二個(gè)參數(shù)可以是任意類joke(Strings1)、joke(Strings1,Strings2)joke(Strings1,doubled2,Strings3)ob)是,但,joke(Strings)與joke(Useru)均不是。不僅joke(Objectob)是,joke(Strings)和joke(Useru)也是。AspectJ的開發(fā)環(huán)AspectJ是專門針對AOP問題的,所以其運(yùn)行是需要AOP環(huán)境的,即需要之前的AOP的兩個(gè)Jar包。另外,還需要AspectJ自身的Jar包:在Spring支持庫解壓 org.aspectj下有兩個(gè)子包:還包含了其它工具,但一般不用。所以,使用weaver包中的Jar即可。當(dāng)然,在Spring中使用AspectJ,還需要將它們聯(lián)系一起的整合Jar包。在Spring框架 的libs中。AOP約在配置文件頭部,要引入關(guān)于aop的約束。在Spring框架的解 中而非Spring框架本身在實(shí)現(xiàn)AOP時(shí)使用的。XMLAspectJ基于注解的AOP實(shí)現(xiàn)步驟Step1:定義業(yè)務(wù)接口與實(shí)現(xiàn)類Step3:在切面類上添加 注Step4:在POJO類的普通方法上添加通知注解通過execution表達(dá)式指定具體應(yīng)用的目標(biāo)類與目標(biāo)方法,即切入點(diǎn)。Step5:目標(biāo)對象與POJO切面Step6:AspectJ的自+。對象。這個(gè)是由容器自動(dòng)生成的。只需要在Spring配置文件中一個(gè)基于aspectj的。 />的底層是由 Creator實(shí)現(xiàn)的其工作原理是,<aop:aspectj-auto/>通過掃描找到@Aspect定義的切面類,再由切Step7:測試類中使用目標(biāo)對象的@Before前置通知-增強(qiáng)方法有JoinPoint參JoinPoint類型參returning屬性就是用于指定接收方法返回值的變量名的。所以,被注解為后JoinPoint參數(shù)外,還可以包含用于接收返回值的變量。該變量最好為Object類型,因?yàn)槟繕?biāo)方法的返回值可能是任何類型。ProceedingJoinPointProceedingJoinPoint其有一個(gè)throwing屬性用于指定所發(fā)生的異常類對象。其用法是,將@Pointcutexecuteionvalue屬性值均可使用該方法名作為切入點(diǎn)。代表的就是@Pointcut定義的切入點(diǎn)。這個(gè)使用@Pointcute注解的方法一般使用private的標(biāo)識方法,即沒有實(shí)際作用的方法。AspectJXMLAOP實(shí)現(xiàn)步驟Step1:定義業(yè)務(wù)接口與實(shí)現(xiàn)類Step3:目標(biāo)對象與POJO切面通過其子<aop:pointcut/>定義切入點(diǎn),該有兩個(gè)屬性,id與expression。分別用于指定該切入點(diǎn)的名稱及切入點(diǎn)的值。expression的值為execution表達(dá)式。AspectJ的6種通知的XML如下:Step5:測試類中使用目標(biāo)對象的<aop:before/>前置通知<aop:after-returning/>后置通知<aop:around/>環(huán)繞通知參數(shù)ProceedingJoinPoint,其方法proceed()可執(zhí)行目標(biāo)方法。<aop:after-throwing/>異常通知其可作為增強(qiáng)方法的參數(shù)出現(xiàn),該參數(shù)為Throwable類型。<aop:after/>最終通知第4 Spring與本章內(nèi)容主要包含兩部分:Spring所使用的操作數(shù)據(jù)庫的技術(shù)之一,JDBC模板的使用;另一部分則為Spring對于事務(wù)的管理。SpringJDBCJDBC而帶來的復(fù)雜且冗長的代碼,Spring提供了一個(gè)強(qiáng)有力的模板類---JdbcTemte來簡化JDBC操作。并且,數(shù)據(jù)源DataSource對象與模板JdbcTemte對象均可通過Bean的形式定義在配置文件中,充分發(fā)揮了依賴注入的。 SpringJDBCJarSpringJar搭建測試環(huán)境定義實(shí)體類定義數(shù)據(jù)庫及初步定義現(xiàn)。保持默認(rèn)即可。后面會(huì)逐個(gè)通過Jdbc模板來實(shí)現(xiàn)。定義測試類數(shù)據(jù)源的配置JDBCBeanSpring配DriverManagerDataSource類繼承自 DBCP數(shù)據(jù)源 +url、username、password四個(gè)DB連接屬性。C3P0數(shù)據(jù)源 的。CtjdbcUrl、user、passwordDB從屬性文件數(shù)據(jù)庫連接信Spring配置文件從屬性文件中數(shù)據(jù)時(shí),需要在<property/>的value屬性中使用${},將在屬性文件中定義的key括起來,以指定屬性的值。<bean/>方式-使用class為 以PropertyceholderConfigurer類的bean實(shí)例的方式進(jìn)行。該類有一個(gè)屬<context:property-ceholder/>方 JDBCDao實(shí)現(xiàn)類繼承JdbcDaoSupport類中直接注入數(shù)據(jù)源對象。這樣會(huì)讓系統(tǒng)自動(dòng)創(chuàng)建JDBC模板對象。對DBJdbcTemte類中提供了對DB進(jìn)行修改、查詢的方法。Dao實(shí)現(xiàn)類使用繼承 publicintupdate(Stringsql)publicintupdate(Stringsql,Object…DBJDBC模板的查詢結(jié)果均是以對象的形式返回。根據(jù)返回對象類型的不同,可以將查詢類型,如List<String>等。簡單對象查詢pubicTqueryForObject(Stringsql,Class<T>type,Object...args)pubicList<T>queryForList(Stringsql,Class<T>type,Object...args)自定義對象查queryForObject()與查詢結(jié)果為List的query()。pubicTqueryForObject(Stringsql,RowMapper<T>m,Object...args)pubicList<T>query(Stringsql,RowMapper<T>m,Object...args)rowNumrs并不表示總的結(jié)果集,而是表示rowNum所代表的當(dāng)前行的記錄所定義的結(jié)果集,僅僅是當(dāng)前行的結(jié)果。注意 模板對象是多例次使用JdbcTemte對象時(shí),都需要通過getJdbcTemte()方法獲取。Dao層。但一般情況下,需要將事務(wù)提升到業(yè)務(wù)層,即Service層。這樣做是為了能夠使用事務(wù)的特性來管理具體的業(yè)務(wù)。Spring事務(wù)管事務(wù)管理器接口事務(wù)管理器是tformTransactionManager接口對象。其主要用于完成事務(wù)的提交、回滾,及獲取事務(wù)的狀態(tài)信息。查看SpringAPI幫助文檔:Spring框架解壓下的A、常用的兩個(gè)實(shí)現(xiàn)類B、Spring的回滾方Spring事務(wù)的默認(rèn)回滾方式是:發(fā)生運(yùn)行時(shí)異常時(shí)回滾,發(fā)生受查異常時(shí)提交。不過,C、回顧錯(cuò)誤與異常ThrowableJava語言中所有錯(cuò)誤或異常的超類。只有當(dāng)對象是此類(或其子類之一)的實(shí)例時(shí),才能通過Java虛擬機(jī)或者Javathrow語句拋出。Error是程序在運(yùn)行過程中出現(xiàn)的無法處理的錯(cuò)誤,比如OutOfMemoryError、 ethodError等。當(dāng)這些錯(cuò)誤發(fā)生時(shí),程序是無法處理(捕獲或拋出)的,JVM一般會(huì)終止線程。RuntimeExceptionNullPointerException、ArrayIndexOutOfBoundception、IllegalArgumentException等均屬于RuntimeException的子類,那么定義的就是受查異常。事務(wù)定義接口事務(wù)行為、事務(wù)默認(rèn)超時(shí)時(shí)限,及對它們的操作。A、定義了五個(gè)事務(wù)級別常 B、定義了七個(gè)事務(wù)行為常如該行為加在doOther()方法上。若doSome()方法在執(zhí)行時(shí)就是在事務(wù)內(nèi)的,則doOther()C、定義了默認(rèn)事務(wù)超時(shí)時(shí)限的none值。程序舉例環(huán)境搭建本例要實(shí)現(xiàn)模擬。存在兩個(gè)實(shí)體:銀行賬戶Account與賬戶Stock。當(dāng)要Step1:創(chuàng)建數(shù)據(jù)庫表Step2:創(chuàng)建實(shí)體類Step4:定義dao實(shí)現(xiàn)daoAccountDaoImplStockDaoImpl,注意,它們要繼承自Step5:定義異常類Step6:定義Service接Step7:定義service的實(shí) 配置文件中添加最全約束<<beans"""""Step9:修改Spring配置文件內(nèi)容Step10:定義測試類使用Spring的事務(wù)工廠管理事該方式是,需要為目標(biāo)類,即Service的實(shí)現(xiàn)類創(chuàng)建事務(wù)。事務(wù)使用的類對于XML配置方式實(shí)現(xiàn)事務(wù)管理時(shí),受查異常的回滾方式,程序員可以通過以下Step1:項(xiàng)Step3:在容器中添加事務(wù)管理器Step4:在容器中添加事務(wù)TransactionStep5:修改測試類使用Spring的事務(wù)注解管理事務(wù)通過@Transactional注解方式,也可將事務(wù)織入到相應(yīng)方法中。而使用注解方式,只需在配置文件中加入一個(gè)tx,以告訴spring使用注解來完成事務(wù)的織入。該只需指propagation:用于設(shè)置事務(wù)屬性。該屬性類型為Propagation枚舉,默認(rèn)值isolation:用于設(shè)置事務(wù)的級別。該屬性類型為Isolation枚舉,默認(rèn)值false。方法,如果加上了注解@TransactionalSpring不會(huì)報(bào)錯(cuò),但不會(huì)將指定事務(wù)織入到該方法中。因?yàn)镾pring會(huì)忽略掉所有非public方法上的@Transaction注解。Step1:項(xiàng)Step2:在容器中添加事務(wù)管理器Step3:在Service實(shí)現(xiàn)類方法上添加注解Step4:修改配置文件內(nèi)Step5:修改測試類使用AspectJ的AOP配置管理事務(wù)(重點(diǎn)使用XML配置事務(wù)的方式的不足是,每個(gè)目標(biāo)類都需要配置事務(wù)。當(dāng)目標(biāo)類使用XML配置顧問方式可以自動(dòng)為每個(gè)符合切入點(diǎn)表達(dá)式的類生成事務(wù)。其用法Step1:項(xiàng)Jar包外,還需要兩個(gè)Jar包:AspectJJarSpring整合AspectJJar包。Step3:在容器中添加事務(wù)管理器Step4:配置事務(wù)通知例如,應(yīng)用到buyStock方法上的事務(wù)要求是必須的,且當(dāng)buyStock方法發(fā)生Step5:配置顧問Service層,否則將會(huì)拋出對數(shù)據(jù)源的循環(huán)異常。因?yàn)橄旅娴膶懛ㄍ瑫r(shí)會(huì)把Service層與Dao層的方法均作為切入點(diǎn),ServiceDao中均注入了數(shù)據(jù)源,而ServiceDao,所以就出現(xiàn)了循環(huán)調(diào)Step6:修改測試類 第5 SSH框架整合技SpringHibernate除了JdbcTemte外,Spring還可通過Hibernate來完成Dao的工作。即將SpringSpringAOP的兩個(gè)JarSpringJDBCJar 下的 SpringJar 下的 Hibernate的基本JarHibernateJarC3P0JarSpring中提供的版本。所以直接使用Hibernate中的即可。實(shí)體映射文件的配置數(shù)據(jù)源SpringBeanSpringSPring配置SessionFactory的Bean,將hibernate.cfg.xml文件替換掉。使用的實(shí)現(xiàn)類為LocalSessionFactoryBeanhibernate5包下的。其用于設(shè)置的屬性主要有三個(gè):數(shù)據(jù)源,映射文件,及hibernate特性。其設(shè)置內(nèi)容,與Hibernate主配置文件的基本相同。注意映射文件的方式 注意當(dāng)前Session上下文所使用的類hibernate.current_session_context_classSession所執(zhí)行的上下文環(huán)Dao象的創(chuàng)建,也是由SpringDaoSessionFactory屬性,以便Spring容器通過setter將Session工廠注入。注意,DaoSessionFactoryset屬性即可。而Hibernate的Session對象,是通過SessionFactory的getCurrentSession()方法獲取的。配置事務(wù)管理器由于Hibernate的Session要求必須在事務(wù)環(huán)境下才能運(yùn)行,所以在Spring中使用Hibernate,必須要配置事務(wù)管理器,以開啟事務(wù)環(huán)境此時(shí)使用的事務(wù)管理器為dataSource,而使用Hibernate的事務(wù)管理器,則需要注入一個(gè)sessionFactory屬性。配置事務(wù)通知及顧問Spring中一般不使用Hibernate模板對象(了解有Dao中,通過SessionFactory的方法getCurrentSession()獲取Session。有為什么不使用Hibernate模板呢?查看HibernateTemte源碼,發(fā)現(xiàn)Hibernate模板對遇到復(fù)雜查詢,還需要使用其execute()方法,通過回調(diào)接口HibernateCallback在獲取到Session也是通過getCurrentSession()獲得的。下面以模板對象的save()方法的源碼為例,來查看其Session的獲取情況。不使用SpringWebStep2:定義index頁面Step3:定義LoginServlet(重點(diǎn)代碼Step4:定義success頁所有Jar包newSpringSpring容SpringSpring容器的創(chuàng)建語句放在Servlet的doGet()或doPost()方法中是有問題的。法時(shí)執(zhí)行。并且,ServletServlet實(shí)例,所有執(zhí)行該業(yè)務(wù)的用戶執(zhí)行的都是這一個(gè)Servlet實(shí)例。這樣,Spring容器就具有了唯一性了。但是,Servlet是一個(gè)業(yè)務(wù)一個(gè)Servlet實(shí)例,即LoginServlet只有一個(gè),但還會(huì)有也就都會(huì)創(chuàng)建一個(gè)Spring容器了。這樣一來,Spring容器就又不唯一了。SpringWeb對于Web應(yīng)用來說,ServletContext對象是唯一的,一個(gè)Web應(yīng)用,只有一個(gè)器的創(chuàng)建語句放到ServletContext的初始化方法中執(zhí)行,并將創(chuàng)建好的Spring容器作為ServletContext的屬性放入其中。以后再需要Spring容器,直接該屬性值即可。放入ServletContext中的Spring容器,在整個(gè)應(yīng)用的生命周期中,均可被。這樣就可以保證Spring容器在Web應(yīng)用中的唯一性了。在WebSpringSpring對WebSpring框架的解壓下的libs若要在ServletContext初始化時(shí)創(chuàng)建Spring容器,就需要使用監(jiān)聽器接口ServletContextListener對ServletContext進(jìn)行。Spring為該器接口定義了一個(gè)實(shí)現(xiàn)類ContextLoaderListener,專門用于在ServletContext初始化時(shí)創(chuàng)建Spring容器。查看源碼: 指定Spring配置文件的位置<context-ContextLoaderListenerSpringSpring配置文件。其默認(rèn)Spring配置文件位置與名稱為:WEB-INF/applicationContext.xml。但,一般會(huì)將該配置文從器ContextLoaderListener的父類ContextLoader的源碼中可以看到其要的配修改Spring配置文件中映射文件路徑的寫法Jarspring-web中代碼要求,SpringSpringStruts2Struts2ActionViewServiceStruts2項(xiàng)目中View層、Service層、Dao層的。將ActionSpringAction實(shí)例由Struts2自己創(chuàng)建,Servcie由容器注入給 的 將Service為Action的屬性名稱與Spring配置文件中的Serviceid相同。用于將Action交由Spring容器來管理。其在Struts2中默

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論