




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Spring輕量級(jí)容器框架Spring簡(jiǎn)介Spring是一個(gè)控制反轉(zhuǎn)〔Ioc〕和面向切面編程〔AOP〕的輕量級(jí)的容器,為軟件開(kāi)發(fā)提供全方位支持的應(yīng)用程序框架??刂品崔D(zhuǎn)(InversionofControl,IoC)與依賴(lài)注入(DependencyInjection,DI)。由容器來(lái)管理對(duì)象之間的依賴(lài)關(guān)系〔而不是對(duì)象本身來(lái)管理〕,就叫“控制反轉(zhuǎn)”或“依賴(lài)注入”.控制反轉(zhuǎn)應(yīng)用本身不負(fù)責(zé)依賴(lài)對(duì)象的創(chuàng)立和維護(hù),而是由外部容器來(lái)負(fù)責(zé)。這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到外部容器,控制權(quán)的轉(zhuǎn)移就是所謂的反轉(zhuǎn)。容器是符合某種標(biāo)準(zhǔn)能夠提供一系列效勞的管理器,開(kāi)發(fā)人員可以利用容器所提供的效勞來(lái)方便地實(shí)現(xiàn)某些特殊的功能。所謂的“重量級(jí)”容器是指那些完全遵守J2EE的標(biāo)準(zhǔn),提供標(biāo)準(zhǔn)中所有的效勞。EJB就是典型的例子?!拜p量級(jí)”容器的也是遵守J2EE的標(biāo)準(zhǔn),但其中的效勞可以自由配置。Spring最常用的特性利用Spring來(lái)創(chuàng)立對(duì)象〔JavaBean工廠〕利用Spring構(gòu)建業(yè)務(wù)邏輯層管理依賴(lài)關(guān)系適應(yīng)需求變更利用Spring創(chuàng)立數(shù)據(jù)訪問(wèn)對(duì)象〔DAO〕利用Spring進(jìn)行事務(wù)處理Spring的安裝下載并解壓將相應(yīng)的jar包參加類(lèi)路徑spring.jar配置SpringApplicationContext.xmlIoC/DI控制反轉(zhuǎn)(InversionofControl,IoC)與依賴(lài)注入(DependencyInjection,DI)。由容器來(lái)管理對(duì)象之間的依賴(lài)關(guān)系〔而不是對(duì)象本身來(lái)管理〕,就叫“控制反轉(zhuǎn)”或“依賴(lài)注入”前面的例子,已清楚闡述IoC/DI出現(xiàn)的原因,以及IoC的根本原理:抽象不依賴(lài)于現(xiàn)實(shí),而是現(xiàn)實(shí)依賴(lài)于抽象。Spring框架的根本思想就是IoC/DI,Spring就是一個(gè)IoC容器IoC與DI,說(shuō)的是一回事,但DI這個(gè)名詞更能表達(dá)這種設(shè)計(jì)模式的思想Spring架構(gòu)依賴(lài)注入的類(lèi)型構(gòu)造器注入通過(guò)類(lèi)的構(gòu)造方法注入依賴(lài)關(guān)系使用<constructor-arg>
元素設(shè)值方法注入通過(guò)類(lèi)的setter方法注入依賴(lài)關(guān)系使用<property>元素依賴(lài)注入的配置注入根本數(shù)據(jù)類(lèi)型,字符串等。在<property>或<constructor-arg>元素中使用<value>在<property>或<constructor-arg>元素中加上value屬性注入依賴(lài)對(duì)象在<property>或<constructor-arg>元素中使用<ref>在<property>或<constructor-arg>元素中加上ref屬性注入null值如果使用<value></value>這種形式,Spring是作為空字符串來(lái)對(duì)待的。可以使用<null>表示null值內(nèi)部Bean,在<property>或<constructor-arg>元素中使用<bean>元素再定義一個(gè)Bean內(nèi)部Bean的scope、id、name屬性會(huì)被忽略?xún)?nèi)部Bean總是prototype(原型)模式內(nèi)部Bean不能在包含該內(nèi)部Bean的Bean之外依賴(lài)注入的配置注入集合通過(guò)<list>、<set>、<map>、<props>配置與JavaCollection類(lèi)型對(duì)應(yīng)List、Set、Map、Properties<propertyname=“l(fā)ists”>
<list><value></value><ref/></list></property><propertyname=“maps”>
<map><entry><key> <value></value> </key><value></value></entry></map></property><propertyname=“sets”>
<set><value></value><ref/></set></property><propertyname=“emails”>
<props><propkey=“support”></prop></props></property>Bean的依賴(lài)模式1用ref屬性指定依賴(lài)。local模式
Bean與被參考引用的Bean在同一個(gè)XML文件中,而且被參考 應(yīng)用的Bean是指定id屬性。
Spring的XML解析器會(huì)在解析時(shí)匹配,如果沒(méi)有匹配的元 素,XML解析器會(huì)產(chǎn)生一個(gè)錯(cuò)誤。<propertyname="book"><reflocal="book1"/></property>
Bean的依賴(lài)模式2bean模式〔可找id,也可找name命名的別名〕<beanid="book1"name="book2"class="com.Book">Bean與被參考引用的Bean可以在不同的XML文件中。ApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"beans1.xml","beans2.xml"});bean-dao.xmlbean-po.xmlbean-service.xmlbean-….xmlBean的依賴(lài)模式3parent模式,表示被參考引用的Bean可以是當(dāng)前
BeanFactory或ApplicationContext的父BeanFactory或ApplicationContext中的Bean。表示繼承的父類(lèi)
如果有很多繼承同一個(gè)父類(lèi)的BEAN
那么在配置文件中實(shí)例那些BEAN時(shí)候可以省略掉父類(lèi)已經(jīng)注入的屬性
bean定義繼承父bean定義,它可以覆蓋父bean的一些值,或者它需要的值。
三種實(shí)例化Bean的方式使用類(lèi)構(gòu)造器實(shí)例化,也就是沒(méi)有參數(shù)的構(gòu)造函數(shù)來(lái)建立Bean的實(shí)例
<beanid="sample"class="com.fendou.service.impl.SampleImpl"/>使用靜態(tài)工廠方法實(shí)例化publicPersonFactory{publicstaticPersongetPerson(){returnnewPerson(); }}<beanid="person2"class="com.spring.bean.PersonFactory"factory-method="getPerson"></bean>使用實(shí)例工廠方法實(shí)例化<beanid=“sampleFactory"class="com.fendou.service.impl.SampleFactory“><beanid="sample3"factory-bean=“sampleFactory”factory-method=“createSample”/>Bean的作用域Singleton。在Spring中取得的實(shí)例被默認(rèn)為Singleton(單例)<beanid=“sample”class=“com.fendou.service.impl.SampleImpl“scope=“singleton”/><beanid=“sample”class=“com.fendou.service.impl.SampleImpl“singleton=“true”/>Prototype。在每次對(duì)該bean請(qǐng)求時(shí)創(chuàng)立出一個(gè)新的bean對(duì)象(原型)<beanid=“sample”class=“com.fendou.service.impl.SampleImpl“scope=“prototype”/>其他作用域:request、session、globalsession延遲初始化Bean默認(rèn)的情況下在容器啟動(dòng)時(shí)會(huì)初始化Bean。但可以通過(guò)指定<bean>元素中的lazy-init屬性來(lái)延遲初始化Bean,這樣將會(huì)在第一次獲取Bean的時(shí)候初始化Bean
<beanid="sample"class="com.fendou.service.impl.SampleImpl“l(fā)azy-init=“true”/>如果想對(duì)所有的Bean都延遲初始化,可以修改<beans>元素
<beansdefault-lazy-init=“true”>Bean的生命周期Bean的生命周期包括:Bean的定義、Bean的初始化、Bean的使用、Bean的銷(xiāo)毀。Bean的初始化可以通過(guò)指定init-method屬性來(lái)完成
<beanid="sample"class="com.fendou.service.impl.SampleImpl“ init-method=“init”/>
或者通過(guò)實(shí)現(xiàn)接口,實(shí)現(xiàn)afterPropertiesSet()方法來(lái)完成Bean的銷(xiāo)毀可以通過(guò)指定destory-method屬性來(lái)完成
<beanid="sample"class="com.fendou.service.impl.SampleImpl“destory-method=“clearup”/>
或者通過(guò)實(shí)現(xiàn)接口,實(shí)現(xiàn)destory()方法來(lái)完成Bean的自動(dòng)裝配模式Spring提供了5種自動(dòng)裝配的模式,從而減少一些屬性的設(shè)置。在<bean>元素中設(shè)置autowire屬性byName模式,通過(guò)Bean的屬性名字進(jìn)行自動(dòng)裝配byType模式,通過(guò)在配置文件查找一個(gè)屬性類(lèi)型一樣的Bean來(lái)進(jìn)行自動(dòng)裝配constructor模式,是指根據(jù)構(gòu)造函數(shù)的參數(shù)盡心自動(dòng)裝配autodetect模式,通過(guò)對(duì)Bean檢查類(lèi)的內(nèi)部來(lái)選擇是constructor還是byType模式no模式,不使用自動(dòng)裝配在企業(yè)應(yīng)用開(kāi)發(fā)過(guò)程中,是不主張使用自動(dòng)裝配模式的Bean的依賴(lài)檢查Spring允許Bean在初始化之前強(qiáng)制執(zhí)行其他Bean的初始化。通過(guò)的<bean>元素中指定depends-on屬性設(shè)置通過(guò)在<bean>元素中指定dependency-check屬性來(lái)檢查Bean的每個(gè)屬性是否設(shè)定完成。simple模式,對(duì)根本類(lèi)型、字符串、集合進(jìn)行依賴(lài)檢查object模式,對(duì)依賴(lài)的對(duì)象進(jìn)行依賴(lài)檢查all模式,對(duì)全部屬性進(jìn)行依賴(lài)檢查none模式,不進(jìn)行依賴(lài)檢查基于注解的依賴(lài)注入基于注解〔Annotation〕的配置有越來(lái)越流行的趨勢(shì),Spring2.5順應(yīng)這種趨勢(shì),提供了完全基于注釋配置Bean、裝配Bean的功能,學(xué)員可以使用基于注解的SpringIoC替換原來(lái)基于XML的配置。注解配置相對(duì)于XML配置具有很多的優(yōu)勢(shì):它可以充分利用Java的反射機(jī)制獲取類(lèi)結(jié)構(gòu)信息,這些信息可以有效減少配置的工作。注釋和Java代碼位于一個(gè)文件中,而XML配置采用獨(dú)立的配置文件,大多數(shù)配置信息在程序開(kāi)發(fā)完成后都不會(huì)調(diào)整,如果配置信息和Java代碼放在一起,有助于增強(qiáng)程序的內(nèi)聚性。而采用獨(dú)立的XML配置文件,程序員在編寫(xiě)一個(gè)功能時(shí),往往需要在程序文件和配置文件中不停切換,這種思維上的不連貫會(huì)降低開(kāi)發(fā)效率。因此在很多情況下,注解配置比XML配置更受歡送,注解配置有進(jìn)一步流行的趨勢(shì)。Spring2.5的一大增強(qiáng)就是引入了很多注釋類(lèi),現(xiàn)在我們已經(jīng)可以使用注解配置完成大局部XML配置的功能?;谧⒔獾囊蕾?lài)注入spring注解的使用1、要使用注解來(lái)代替xml的配置,要引入如下jar包:%spring_home%\lib\j2ee\common-annotations.jar。而且在applicationContext.xml中要參加<context:annotation-config/>的命名空間。2、引入spring頭文件3、寫(xiě)@開(kāi)頭注解@Resource注入接口配置文件修改<beansxmlns=":///schema/beans"xmlns:xsi=":///2001/XMLSchema-instance"xmlns:context=":///schema/context"xsi:schemaLocation=
:///schema/context/spring-context-2.5.xsd"><context:annotation-config/></beans>基于注解的依賴(lài)注入@Resource注解以前我們使通過(guò)配置xml文件方式來(lái)表示Bean之間的依賴(lài)關(guān)系,而現(xiàn)在我們可以通過(guò)@Resource方式來(lái)表示Bean之間的依賴(lài)關(guān)系packagecom.fendou;importjavax.annotation.Resource;publicclassUser{//通過(guò)@Resource注解把配置文件中id為user1的bean注入給屬性u(píng)ser1
@Resource(name="user1")privateUser1user1;@Resource(name="user2")privateUser2user;//省略了getter和setter方法}基于注解的依賴(lài)注入@PostConstruct和@PreDestroy注解Spring容器中的Bean是有生命周期的,Spring允許在Bean在初始化完成后以及Bean銷(xiāo)毀前執(zhí)行特定的操作,您既可以通過(guò)實(shí)現(xiàn)InitializingBean/DisposableBean接口來(lái)定制初始化之后/銷(xiāo)毀之前的操作方法,也可以通過(guò)<bean>元素的init-method/destroy-method屬性指定初始化之后/銷(xiāo)毀之前調(diào)用的操作方法。關(guān)于Spring的生命周期已經(jīng)在前面的章節(jié)詳細(xì)講解過(guò)了,現(xiàn)在我們用@PostConstruct和@PreDestroy這兩個(gè)注釋從新測(cè)試spring的生命周期。標(biāo)注了@PostConstruct的方法將在類(lèi)實(shí)例化后調(diào)用,而標(biāo)注了@PreDestroy的方法將在類(lèi)銷(xiāo)毀之前調(diào)用。請(qǐng)看User.java類(lèi)packagecom.fendou;importjavax.annotation.PostConstruct;importjavax.annotation.PreDestroy;publicclassUser{@PostConstructpublicvoidinit(){System.out.println("init");}@PreDestroypublicvoiddestory(){System.out.println("destory");}}下面是spring的配置<context:annotation-config/><beanid="user"class="com.fendou.User"></bean>基于注解的依賴(lài)注入@Component注解雖然我們可以通過(guò)@Resource在Bean類(lèi)中使用自動(dòng)注入功能,但是Bean還是在XML文件中通過(guò)<bean>進(jìn)行定義,也就是說(shuō),在XML配置文件中定義Bean,通過(guò)@Resource為Bean的成員變量、方法入?yún)⒒驑?gòu)造函數(shù)入?yún)⑻峁┳詣?dòng)注入的功能。能否也通過(guò)注解定義Bean,從XML配置文件中完全移除Bean定義的配置呢?答案是肯定的,我們通過(guò)Spring2.5提供的@Component注釋就可以到達(dá)這個(gè)目標(biāo)了。下面,我們完全使用注釋定義Bean并完成Bean之間裝配:使用@Component注解的User1,僅需要在類(lèi)定義處,使用@Component注解就可以將一個(gè)類(lèi)定義了Spring容器中的Bean。方法:1、參加spring配置文件中參加
<context:component-scanbase-package="com.spring.bean"></context:component-scan><beansxmlns=":///schema/beans"xmlns:xsi=":///2001/XMLSchema-instance"xmlns:context=":///schema/context"xsi:schemaLocation="><context:component-scanbase-package="com.spring.bean"></context:component-scan>
用@Component方法注入到spring中.@ComponentpublicclassUser1{ publicvoidprint(){System.out.println("我是User1");}}基于注解的依賴(lài)注入使用@Component注解的User2@ComponentpublicclassUser2{publicvoidprint(){System.out.println("我是User2");}}使用@Component注解的Userpackagecom.fendou;importjavax.annotation.Resource;importorg.springframework.stereotype.Component;@Component("user")publicclassUser{@Resource(name="user1")privateUser1user1;@Resource(name="user2")privateUser2user2;//省略了getter和setter方法 }基于注解的依賴(lài)注入@Scope注解默認(rèn)情況下通過(guò)@Component定義的Bean都是singleton的,如果需要使用其它作用范圍的Bean,可以通過(guò)@Scope注釋來(lái)到達(dá)目標(biāo),如以下代碼所示:packagecom.fendou;importorg.springframework.context.annotation.Scope;importorg.springframework.stereotype.Component;@Component@Scope("prototype")publicclassUser1{publicvoidprint(){ System.out.println("我是User1");}}其他注解@Repository 持久層@Service 業(yè)務(wù)層@Controller 控制層〔Web層〕@Component對(duì)那些比較中立的類(lèi)進(jìn)行注解。
這3個(gè)注解和@Component是等效的和@Component相比沒(méi)有什么新意,但Spring將在以后的版本中為它們添加特殊的功能AOP面向切面(方面)編程〔AspectOrientedProgramming,AOP)在實(shí)際應(yīng)用中,常常會(huì)寫(xiě)一些與具體業(yè)務(wù)無(wú)關(guān)的代碼,例如日志、權(quán)限、異常處理、事務(wù)處理等。在編寫(xiě)的過(guò)程中,將這樣的代碼編寫(xiě)到一起,所以處處都有重復(fù)的代碼。使用AOP,就是將這種和業(yè)務(wù)邏輯關(guān)系不大的代碼別離出來(lái),到達(dá)重用的目的。AOP是一種思想,和具體的實(shí)現(xiàn)技術(shù)無(wú)關(guān)。任何一種符合AOP思想的技術(shù)實(shí)現(xiàn),都可以看作AOP的實(shí)現(xiàn)。Spring的AOP是建立在Java的動(dòng)態(tài)代理機(jī)制之上的。Java的反射機(jī)制什么是動(dòng)態(tài)語(yǔ)言?根本的定義是程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類(lèi)型,這種語(yǔ)言稱(chēng)為動(dòng)態(tài)語(yǔ)言。在這樣的定義與分類(lèi)下Java不是動(dòng)態(tài)語(yǔ)言,它卻有著一個(gè)非常突出的動(dòng)態(tài)相關(guān)機(jī)制:Reflection〔反射〕Java的反射機(jī)制:Java程序可以加載一個(gè)運(yùn)行時(shí)才得知名稱(chēng)的class,得悉其完整構(gòu)造,并生成其對(duì)象實(shí)體、或?qū)ζ鋐ields設(shè)值、或調(diào)用其methods。這種機(jī)制也可以稱(chēng)為introspection〔內(nèi)省〕通過(guò)和包中的Method、Field、Constructor等實(shí)現(xiàn)。Java的動(dòng)態(tài)代理普通代理模式:生成一個(gè)和類(lèi)相同接口的代理類(lèi),用戶(hù)通過(guò)使用代理類(lèi)來(lái)封裝某個(gè)實(shí)現(xiàn)類(lèi)。
Java的動(dòng)態(tài)代理:動(dòng)態(tài)代理中的代理類(lèi)是由java.lang.reflect.Proxy類(lèi)在運(yùn)行期時(shí)根據(jù)接口定義,采用Java反射機(jī)制動(dòng)態(tài)生成的。結(jié)合接口,加強(qiáng)現(xiàn)有類(lèi)的方法實(shí)現(xiàn)。使用CGLIB代理AOP的概念連接點(diǎn)(JoinPoint),指程序運(yùn)行中的某個(gè)階段點(diǎn),如某個(gè)方法的調(diào)用,異常的拋出等。切入點(diǎn)(Pointcut)是連接點(diǎn)的集合,它是程序中需要注入Advice的位置的集合,指明Advice要在什么樣的條件下才能觸發(fā)。通知(Advice),指某個(gè)連接點(diǎn)所采用的處理邏輯,前例中輸出日志的代碼就是一個(gè)通知。Advisor,是切入點(diǎn)和通知之間的配置器。SpringAOP首先我們要參加如下jar文件%spring_home%\lib\aspectj\aspectjrt.jar%spring_home%\lib\aspectj\aspectjweaver.jarSpring配置文件的頭要有如下內(nèi)容xmlns:aop=":///schema/aop"一個(gè)例子:我們用spring實(shí)現(xiàn)事務(wù),事務(wù)不是硬編碼,而是 通過(guò)springaop完成SpringAOPBookFacade.java代碼如下:packagecom.fendou;publicclassBookFacadeImplimplementsBookFacade{ publicvoidaddBook(){ System.out.println("增加圖書(shū)實(shí)際的方法"); }}BookFacadeImpl.java代碼如下:packagecom.fendou;publicinterfaceBookFacade{ publicvoidaddBook();}SpringAOP現(xiàn)在我們定義一個(gè)普通的類(lèi),里面有個(gè)方法用來(lái)開(kāi)啟事務(wù),代碼如下:packagecom.fendou;publicclassTransaction{publicvoidbeginTransaction(){ System.out.println("開(kāi)啟事務(wù)");}}Spring配置文件如下<beanid="bookFacade"class="com.fendou.BookFacadeImpl"></bean><beanid="transaction"class="com.fendou.Transaction"></bean>
<aop:config> <!--切入點(diǎn)--> <aop:pointcutid="trans" <!--切入點(diǎn)表達(dá)式--> expression="execution(*com.fendou.BookFacade.*(..))"/> <!--切面--> <aop:aspectid="myAspect"ref="transaction"> <!--通知--> <aop:beforepointcut-ref="trans"method="beginTransaction"/> </aop:aspect></aop:config>SpringAOP<beanid="bookFacade"class="com.fendou.BookFacadeImpl"></bean><beanid="transaction"class="com.fendou.Transaction"></bean>
<aop:config> <!--切入點(diǎn)--> <aop:pointcutid="trans" <!--切入點(diǎn)表達(dá)式--> expression="execution(*com.fendou.BookFacade.*(..))"/> <!--切面--> <aop:aspectid="myAspect"ref="transaction"> <!--通知--> <aop:beforepointcut-ref="trans"method="beginTransaction"/> </aop:aspect></aop:config>Spring配置文件如下SpringAOP對(duì)一些切入點(diǎn)的說(shuō)明任意公共方法:execution(public**(..))任意一個(gè)名字以set開(kāi)始的方法:execution(*set*(..))AccountService接口定義的任意方法:execution(*com.xyz.service.AccountService.*(..))在service包中定義的任意方法:execution(*com.xyz.service.*.*(..))在service包或其子包中定義的任意方法:execution(*com.xyz.service..*.*(..))
SpringAOP對(duì)于通知的一些說(shuō)明@Before前置通知@AfterReturning后置通知@AfterThrowing異常通知:在方法拋出異常后執(zhí)行@After最終通知:不管一個(gè)方法是如何結(jié)束的,最終通知都運(yùn)行@Around環(huán)繞通知(做權(quán)限使用)通知的第一個(gè)參數(shù)必須是ProceedingJoinPoint類(lèi)型。在通知體內(nèi)調(diào)用它的proceed()方法會(huì)導(dǎo)致后臺(tái)連接點(diǎn)方法的執(zhí)行
基于@AspectJ的AOPAspectJ是AOP的一種實(shí)現(xiàn),spring集成了它還是剛剛的例子BookFacade.java和BookFacadeImpl .java的代碼不變Transaction.java代碼有改動(dòng)如下:
//通過(guò)注解定義切面@AspectpublicclassTransaction{//定義切入點(diǎn)及其表達(dá)式@Pointcut("execution(*com.fendou.BookFacade.*(..))")
publicvoidpointCutXxx(){};
//定義通知類(lèi)型@Before("pointCutXxx()")publicvoidbeginTransaction(){ System.out.println("開(kāi)啟事務(wù)");}}Spring與Hibernate的集成參加hibernate相關(guān)內(nèi)容Hibernate的包實(shí)體類(lèi)與*.hbm.xml文件的建立參加spring相關(guān)內(nèi)容引入spring的包引入spring的配置文件application.xmlSpring與Hibernate的集成讓spring管理hibernate的sessionFactory<!–注入sessionFactory--><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="configLocation"><value>classpath:hibernate.cfg.xml</value></property></bean>配置事務(wù)管理大多數(shù)的應(yīng)用程序,事務(wù)管理被分配到業(yè)務(wù)邏輯方法上,即每個(gè)業(yè)務(wù)邏輯方法是一個(gè)事務(wù)在Spring中,所有的業(yè)務(wù)邏輯對(duì)象,均是普通的POJOSpring最強(qiáng)大的功能在于,它可以在普通的POJO上面實(shí)現(xiàn)聲明式的事務(wù)管理〔它使用AOP來(lái)完成這樣的任務(wù)〕步驟如下:定義一個(gè)事務(wù)管理器配置事務(wù)的傳播特性
Spring與Hibernate的集成定義一個(gè)事務(wù)管理器Spring與Hibernate的集成<!--配置事務(wù)管理器--><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"><reflocal="sessionFactory"/></property></bean>配置事務(wù)的傳播特性Spring與Hibernate的集成<!--配置事務(wù)特性-->
<tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes> <!--對(duì)get/find/search開(kāi)頭的方法要求只讀事務(wù)--> <tx:methodname="get*"propagation="SUPPORTS"read-only="true"/> <tx:methodname="find*"propagation="SUPPORTS"read-only="true"/> <tx:methodname="search*"propagation="SUPPORTS"read-only="true"/> <!--對(duì)其它方法要求事務(wù)--> <tx:methodname="*"propagation="REQUIRED"/></tx:attributes></tx:advice><!--配置那些類(lèi)的方法進(jìn)行事務(wù)管理--><aop:config>
<aop:pointcutid="allManagerMethod"expression="execution(*com.fendou.manager.*.*(..))"/>
<aop:advisoradvice-ref="txAdvice"pointcut-ref="allManagerMethod"/></aop:config>Spring的事務(wù)級(jí)別Spring提供7種事務(wù)級(jí)別REQUIRED,如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù),如果已經(jīng)存在一個(gè)事務(wù)中,參加到這個(gè)事務(wù)中。這是最常見(jiàn)的選擇。SUPPORTS,支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行。MANDATORY,使用當(dāng)前的事務(wù),如果當(dāng)前沒(méi)有事務(wù),就拋出異常。REQUIRES_NEW,新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。NOT_SUPPORTED,以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。PROPAGATION_NEVER,以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),那么拋出異常。PROPAGATION_NESTED,如果當(dāng)前存在事務(wù),那么在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒(méi)有事務(wù),那么執(zhí)行與PROPAGATION_REQUIRED類(lèi)似的操作。創(chuàng)立可以支持Hibernate的DAO對(duì)象HibernateDaoSupport這是Spring提供的集成Hibernate的基類(lèi),所有用Hibernate實(shí)現(xiàn)的DAO,均需要繼承它從這個(gè)類(lèi)中,可以獲取Hibernate的各種核心接口,如Session、SessionFactory等這個(gè)類(lèi)的兩個(gè)重要方法getSession()和getSessionFactory()HibernateTemplateHibernateTemplate是Spring封裝的Hibernate操作接口,類(lèi)似于Session接口可以調(diào)用HibernateDaoSupport提供的getHibernateTemplate()方法獲取HibernateTemplate對(duì)象Template模式:在父類(lèi)定義一個(gè)操作中算法的骨架或操作順序,而將一些步驟的具體實(shí)現(xiàn)延遲到子類(lèi)中。DAO的配置Dao的配置例如必須注入sessionFactory或dataSource的定義<beanid=“staffDao”class=“com.fendou.staff.dao.StaffDaoImpl"><propertyname="sessionFactory"><refbean=“sessionFactory”/></property></bean><beanid=“staffDaoJDBC”class=“com.fendou.staff.dao.StaffDaoJDBCImpl"><propertyname=“dataSource"><refbean=“dataSource”/></property></bean>配置ServiceService配置例如<beanid=“staffHelper”class=“com.fendou.staff.service.StaffHelperImpl"><propertyname=“staffDao”ref=“staffDao”/><propertyname=“staffDaoJDBC”ref=“staffDaoJDBC”/></bean>Spring與struts的集成參加struts相關(guān)內(nèi)容struts的包struts-config.xml參加spring相關(guān)內(nèi)容引入spring的包引入spring的配置文件application.xmlSpring與struts的集成讓系統(tǒng)啟動(dòng)的時(shí)候加載ApplicationContext.xml(在web.xml中增加如下內(nèi)容)<context-param><param-name>contextConfigLocation</param-name><param-value> /WEB-INF/classes/applicationContext-*.xml, classpath*:applicationContext-*.xml</param-value></context-param>
<listener><listener-class></listener-cla
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房屋終止合同協(xié)議書(shū)模板
- 六年級(jí)下冊(cè)數(shù)學(xué)教案-數(shù)學(xué)好玩2《神奇的莫比烏斯帶》 |北師大版
- 2024-2025學(xué)年六年級(jí)下學(xué)期數(shù)學(xué)第二單元圓柱和圓錐的綜合復(fù)習(xí)(教案 )
- 五金廠的勞動(dòng)合同(2025年版)
- 二年級(jí)上冊(cè)數(shù)學(xué)教案-3.2 兒童樂(lè)園-北師大版
- (高清版)DB45∕T 838-2021 三江侗族自治縣侗族百家宴服務(wù)規(guī)范
- 2025年湖南工藝美術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)一套
- 【單元測(cè)試】部編版語(yǔ)文三年級(jí)上冊(cè)第六單元分層訓(xùn)練B卷(提升篇)-(含解析)
- 2024年海洋石油修井機(jī)項(xiàng)目投資申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024年年物流倉(cāng)儲(chǔ)項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 2024年中國(guó)甜瓜市場(chǎng)調(diào)查研究報(bào)告
- (中級(jí))航空油料特設(shè)維修員(四級(jí))理論考試題庫(kù)-上(單選題)
- 部編人教版六年級(jí)道德與法治下冊(cè)全冊(cè)完整版課件
- 電動(dòng)車(chē)輛動(dòng)力電池系統(tǒng)及應(yīng)用技術(shù) 第3版 課件全套 王震坡 第1-11章 動(dòng)力電池及其驅(qū)動(dòng)的電動(dòng)車(chē)輛- 動(dòng)力電池充電方法與基礎(chǔ)設(shè)施
- 【獨(dú)立儲(chǔ)能】山西省獨(dú)立儲(chǔ)能政策及收益分析-中國(guó)能建
- (正式版)CB∕T 4550-2024 船舶行業(yè)企業(yè)安全設(shè)備設(shè)施管理規(guī)定
- 新入職員工廉政談話
- JB∕T 9006-2013 起重機(jī) 卷筒標(biāo)準(zhǔn)規(guī)范
- 2024內(nèi)蒙古中考數(shù)學(xué)二輪專(zhuān)題復(fù)習(xí) 二次函數(shù)與幾何綜合題 類(lèi)型二 面積問(wèn)題(課件)
- 太平洋保險(xiǎn)計(jì)劃書(shū)模板
- 2024年廣東省中考生物+地理試卷(含答案)
評(píng)論
0/150
提交評(píng)論