版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、spring1.這個框架并不像hibernate或struts那樣為了完成特定的功能(操作數(shù)據(jù)庫、處理Http請求),它只是用來優(yōu)化我們的工程的結(jié)果、提升設(shè)計、降低耦合度。2.核心:應(yīng)用上下文ApplicationContext 它就是用來管理工程中無數(shù)類型的核心,一般通過xml文件或者注解來管理。它在啟動時載入xml文件或注解中的類、類之間關(guān)系的信息,在使用時通過一些方式將管理的類型或?qū)ο笕〕鍪褂谩?.(下載spring.zip,這里面包含了相應(yīng)的jar包,以及文檔)第一個spring的應(yīng)用:1、導(dǎo)入jar包到工程中2、在src下創(chuàng)建一個叫applicationContext.xml的配置文
2、件<beans><bean id="hello" class=".Hello"></bean><bean id="bye" class=".Bye"></bean></beans>比如通過上述方式,我們就通過配置文件將,兩個類Hello和Bye分別注冊管理,其代號分別為hello和bye。通過這兩個代號,我們之后就能取出這個兩個類的實(shí)例,并進(jìn)行使用。(相應(yīng)的類要Hello,Bye事先自己定義好)3、使用ClassPathXmlApplicati
3、onContext來加載上一步中的xml文件,以及獲取其中的某個beanApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");加載xml文件中的配置信息,兩個類就被spring管理起來了Hello h = (Hello)ctx.getBean("hello");注意:取出bean時可以用多態(tài)4.開閉原則:對擴(kuò)展開放,對修改關(guān)閉需求變更時,盡量擴(kuò)展一個類,不要去修改原來的類;這樣可以避免在原來正確的類上產(chǎn)生新的bug。5.spring不但可
4、以動態(tài)創(chuàng)建類的實(shí)例,也可以通過配置文件動態(tài)初始化實(shí)例的屬性值1、私有屬性要有對應(yīng)的setter方法2、在bean中定義property屬性,對應(yīng)類中私有屬性,*可以通過配置進(jìn)行屬性的自動設(shè)置。<bean id="cat" class="p.Cat"> 在貓的bean中注冊name屬性,值為TOM <property name="name" value="Tom"></property> 注冊age屬性,值為10,Tom和10兩個值會自動注入到貓
5、的實(shí)例中去 <property name="age" value="11"></property> </bean>*也可以通過構(gòu)造方法來進(jìn)行動態(tài)初始化1、在類中定義需要自動調(diào)用的構(gòu)造方法2、在配置文件的bean中定義<contructor-arg>來使用構(gòu)造方法進(jìn)行屬性值的初始化<bean id="pig" class="p.Pig"> <!- 通過Pig的構(gòu)造方法進(jìn)行初始化,name是構(gòu)造方法形參名,p是傳入構(gòu)造
6、方法的實(shí)參 -> <constructor-arg name="name" value="p"></constructor-arg> <!- age是構(gòu)造方法形參名,10是傳入構(gòu)造方法的實(shí)參 -> <constructor-arg name="age" value="10"></constructor-arg> </bean>*可以和perties格式的配置文件結(jié)合使用1、先要在配置文件中注冊,載入一個pert
7、ies文件的信息<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:perties"/></bean>2、可以在其他的bean中使用這個perties中定義的信息,比如:<bean .><property name="xx" va
8、lue="$zzz"></bean>這種spring的xml配置文件讀取傳統(tǒng)的perties配置文件的方式,將在以后數(shù)據(jù)源配置中經(jīng)常使用,perties中全是數(shù)據(jù)源配置參數(shù),而spring的上下讀取這個perties,然后將其中的參數(shù)值,在bean中使用。這樣兩者各司其職,perties負(fù)責(zé)jdbc的數(shù)據(jù)信息,spring的xml文件負(fù)責(zé)處理bean的注冊及bean之間的關(guān)系。5.spring管理的類,屬性的類型完全可以是自定義類型。這種情況下就設(shè)計到類和類之間的裝配。如果是自定義類型的裝配,那
9、么property標(biāo)簽不再用value了,而用ref,比如:<bean id="computer" class=".Computer"><property name="keyboard" ref="keyboard"></property></bean><bean id="keyboard" class=".Keyboard"></bean>class Keyboardclass Computerpriv
10、ate Keyboard keyboard;/setter.*自動裝配:這個autowire=bytype表示會自動掃描上下文中的類,如果有符合Tool這個類型的就自動裝配 如果一個都不符合或有多個符合就會報異常 <bean id="human" class="com.oracleoaec.autowired.Human" autowire="byType"></bean><bean id="hammer" class="com.oracleoaec.autowired.Ha
11、mmer"></bean>如果有多個匹配就會報異常,可以用autowire-candidate=false來將某些bean排除:<bean id="knife" class="com.oracleoaec.autowired.Knife" autowire-candidate="false"></bean>1.AOP 面向切面編程是一種思想,struts有,spring也有2.如何用spring實(shí)現(xiàn)?1、導(dǎo)入相關(guān)的jar包2、先定義一個目標(biāo)類(其中有核心的邏輯,但共同的邏輯將會通過切
12、面在切入點(diǎn)切入)3、再定義一個切面Aspect操作類,在里面寫上要重復(fù)切入到目標(biāo)的邏輯4、寫配置文件,關(guān)鍵要配置,<aop:config><aop:aspect ref="."><aop:pointcut expression="." id="."></aop:pointcut><aop:before method="." pointcut-ref="."/><aop:after method="." poin
13、tcut-ref="."/><aop:after-returning method="" pointcut-ref="。"/><aop:after-throwing method="" pointcut-ref="。"/></aop:aspect></aop:config>after-returning和after類似,after是在方法邏輯執(zhí)行完執(zhí)行,after-returning是在方法返回后執(zhí)行,核心區(qū)別是如果在方法中產(chǎn)生了異常,aft
14、er是不會執(zhí)行的,但after-returning會。after-throwing是在遇到異常時執(zhí)行method中的方法<aop:around >定義一個方法,有參數(shù)ProceedingJoinPoint,在里面寫上前置、后置的邏輯,并在之間調(diào)用ceed(),也可以靈活的通過條件判斷決定是否要調(diào)用ceed().proceed()的返回值就是方法的返回值jp.getArgs()返回一個Object數(shù)組,就是被代理的方法的參數(shù)值(如果根本沒有參數(shù),就返回一個長度為0的數(shù)組)注解AOP*在配置文件中<aop:aspectj-autoproxy/>激活自
15、動代理<context:component-scan base-package="com.oracleoaec">*在切面類(比如剛才那個例子中就是FileOperation)的類定義上面寫上Aspect注解,然后在這個切面類的方法上定義注解,前置注解Before,后置注解After,環(huán)繞注解Around。在這些注解里面還可以定義切入點(diǎn)point-cut,并寫上類似execution(* com.oracleoaec.*.*()表達(dá)式。AOP的基石-動態(tài)代理模式代理模式一、靜態(tài)代理被代理類(目標(biāo)類)代理類1、目標(biāo)類和代理類具有相同的接口2、代理類中定義有一個屬性
16、,類型就是目標(biāo)類(或者說代理類持有一個目標(biāo)類對象的引用)3、代理類的接口方法中會調(diào)用目標(biāo)類的接口方法,并在其基礎(chǔ)上添加一定的額外功能靜態(tài)代理必須事先知道目標(biāo)類,才能再定義代理類二、動態(tài)代理1、JDK自帶動態(tài)代理功能,InvocationHandler接口、Proxya、定義一個類實(shí)現(xiàn)InvocationHandler,并實(shí)現(xiàn)其抽象方法,并傳入被代理的對象(目標(biāo)對象)b、Proxy.newProxyInstance(.)創(chuàng)建代理對象所謂動態(tài)代理,就是在定義代理邏輯時,根本不需要知道未來被代理的是什么類,什么方法而靜態(tài)代理必須事先知道一些信息注意:JDK的動態(tài)代理的目標(biāo)類,必須實(shí)現(xiàn)接口2、cgli
17、b動態(tài)代理,目標(biāo)類完全可以不實(shí)現(xiàn)任何接口a、定義一個類實(shí)現(xiàn)MethodInterceptor接口,實(shí)現(xiàn)其抽象方法b、創(chuàng)建一個Enhancer對象調(diào)用其setSuperClass方法,傳入被代理的目標(biāo)類調(diào)用setCallback方法,傳入a中定義的類的實(shí)例,也就是要回調(diào)的代理邏輯c、調(diào)用這個Enhancer對象的create方法,產(chǎn)生一個代理對象1.spring和數(shù)據(jù)庫spring可以用bean的方式配置數(shù)據(jù)源 datasource dbcp、c3p0、純jdbc(也勉強(qiáng)可以算一種數(shù)據(jù)源,只是沒有連接池而已)配置完后,可以像之前普通類一樣通過getBean取出連接池對象。再用getConnect
18、ion()獲取連接.spring 提供了默認(rèn)的模板JdbcTemplate來處理大量重復(fù)的jdbc操作,這個JdbcTemplate也可以注冊在applicationContext.xml文件中,注冊成一個bean,而這個JdbcTemplate的bean內(nèi)部又要包含一個DataSource的bean,比如類似:<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property
19、 name="driverClass" value="$jdbc.driverClassName"/> <property name="jdbcUrl" value="$jdbc.url"/> <property name="user" value="$jdbc.username"/> <property name="password" value="$jdbc.password"/></
20、bean><context:property-placeholder location="perties"/><bean id="jdbcTempldate" class="."><property name="dataSource" ref="dataSource"></property></bean><bean id="dataSource" class="."&g
21、t;.</bean>以上標(biāo)簽就將數(shù)據(jù)源裝配jdbc的模板上。2.模板包含數(shù)據(jù)源,而一般Dao包含模板對象<bean id="xxxDao" class="."><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean>ref中的jdbcTemplate表示上下文中定義的模板bean的idname中的jdbcTemplate表示這個Dao類中定義的屬性名,要一致dao一般注入業(yè)務(wù)層、servi
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幻燈片照相產(chǎn)品供應(yīng)鏈分析
- β受體阻斷藥產(chǎn)品供應(yīng)鏈分析
- 維生素泡騰片市場分析及投資價值研究報告
- 為殘障人士提供服務(wù)行業(yè)市場調(diào)研分析報告
- 保險經(jīng)紀(jì)服務(wù)行業(yè)市場調(diào)研分析報告
- 自行車腳踏車車輪項(xiàng)目運(yùn)營指導(dǎo)方案
- 農(nóng)業(yè)碳匯經(jīng)濟(jì)行業(yè)市場調(diào)研分析報告
- 云航空服務(wù)行業(yè)經(jīng)營分析報告
- 團(tuán)隊(duì)協(xié)作培訓(xùn)-企業(yè)培訓(xùn)與咨詢師
- 樂器背帶產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- DB13-T 5958-2024 金屬非金屬露天礦山采場邊坡安全監(jiān)測技術(shù)規(guī)范
- 醫(yī)院康復(fù)科培訓(xùn)課件:《平衡功能評定及訓(xùn)練》
- 2024《整治形式主義為基層減負(fù)若干規(guī)定》全文課件
- 2025屆高三數(shù)學(xué)一輪復(fù)習(xí)策略講座
- 北京市八中2023-2024學(xué)年高二上學(xué)期期中生物試題 含解析
- 職能科室對醫(yī)技科室醫(yī)療質(zhì)量督查記錄表(檢驗(yàn)科、放射科、超聲科、功能科、內(nèi)鏡室)
- 2024至2030年中國機(jī)器人行業(yè)市場競爭狀況及發(fā)展趨向分析報告
- 國家義務(wù)教育質(zhì)量監(jiān)測科學(xué)復(fù)習(xí)試題及答案
- PCBA審核表實(shí)用模板
- 后進(jìn)生轉(zhuǎn)化課件
- 北京富力愛丁堡廣場項(xiàng)目機(jī)電方案設(shè)計報告
評論
0/150
提交評論