spring框架學習筆記_第1頁
spring框架學習筆記_第2頁
spring框架學習筆記_第3頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、spring1. 這個框架并不像 hibernate 或 struts 那樣為了完成特定的 功能(操作數(shù)據(jù)庫、處理 Http 請求 ),它只是用來優(yōu)化我們 的工程的結(jié)果、提升設計、降低耦合度。2. 核心:應用上下文 ApplicationContext 它就是用來管理工 程中無數(shù)類型的核心, 一般通過 xml 文件或者注解來管理。 它在啟動時載入 xml 文件或注解中的類、類之間關系的信 息,在使用時通過一些方式將管理的類型或?qū)ο笕〕鍪褂谩?. (下載 spring.zip, 這里面包含了相應的 jar 包,以及文檔 ) 第一個 spring 的應用 :1、導入 jar 包到工程中2、在 sr

2、c 下創(chuàng)建一個叫 applicationContext.xml 的配置 文件<beans><bean id="hello" class="Hello"></bean><bean id="bye" class="Bye"></bean></beans> 比如通過上述方式,我們就通過配置文件將 ,兩個類 Hello 和 Bye 分別注冊管理,其代號分別為 hello 和 bye。 通過這兩個代號,我們之后就能取出這個兩個類的實例, 并進行使用。 (

3、相應的類要 Hello,Bye 事先自己定義好 )3、使用 ClassPathXmlApplicationContext 來加載上一 步中的 xml 文件,以及獲取其中的某個 beanApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 加載xml文件中的配置信息,兩個類就被spring管理起來了 Hello h = (Hello)ctx.getBean("hello");注意:取出bean時可以用多態(tài)4. 開閉原則 :對擴展開放,對修

4、改關閉 需求變更時, 盡量擴展一個類, 不要去修改原來的類; 這樣可以避免在原來正確的類上產(chǎn)生新的 bug。5. spring 不但可以動態(tài)創(chuàng)建類的實例,也可以通過配置文件 動態(tài)初始化實例的屬性值1、 私有屬性要有對應的setter方法2、在bean中定義property屬性,對應類中私有屬性, *可以通過配置進行屬性的自動設置。在貓的bean中注冊name屬性,值為 TOM <propertyname="name"value="Tom>"</property>注冊age屬性,值為10,Tom和10兩個值會自動注 入到貓的實例中去

5、<property name="age"value="11"></property></bean>*也可以通過構造方法來進行動態(tài)初始化1、在類中定義需要自動調(diào)用的構造方法2、在配置文件的 bean中定義<contructor-arg>來使用 構造方法進行屬性值的初始化<constructor-argname="name"10 是傳入構造方法name="age"<!-通過Pig的構造方法進行初始化,name是構 造方法形參名, p 是傳入構造方法的實參-&g

6、t; value="p"></constructor-arg><!- age是構造方法形參名,的實參 -><constructor-arg value="10"></constructor-arg> </bean>*可以和 perties 格式的配置文件結(jié)合使用1、先要在配置文件中注冊,載入一個 perties 文件的信息<bean<property name="locations"value="classpath:xx

7、perties"/></bean>2、可以在其他的 bean中使用這個perties中定 義的信息,比如 :<bean ><property name="xx" value="$zzz"></bean>這種 spring 的 xml 配置文件讀取傳統(tǒng)的 perties 配置文件的方式,將在以后數(shù)據(jù)源配置中經(jīng)常使用, perties中全是數(shù)據(jù)源配置參數(shù),而spring的上下讀 取這個perties,然后將其中的參數(shù)值,在be

8、an中使用。這樣兩者各司其職,perties負責jdbc的數(shù)據(jù) 信息,spring的xml文件負責處理 bean的注冊及bean之間 的關系。5.spring 管理的類,屬性的類型完全可以是自定義類型。 這種情況下就設計到類和類之間的裝配。 如果是自定義類 型的裝配,那么property標簽不再用value 了,而用ref,比 如:<bean id="computer" class="Computer"><property name="keyboard" ref="keyboard"

9、;></property></bean>vbean id="keyboard" class=".Keyboard"v/bean>class Keyboardclass Computerprivate Keyboard keyboard;/setter*自動裝配:這個autowire=bytype表示會自動掃描上下文中的類,如果有符合Tool這個類型的就自動裝配如果一個都不符合或有多個符合就會報異常autowire=byType>v/bean>vbean id=hammer"如果有多個匹配就會報異常

10、,可以用autowire-candidate=false來將某些bean排除:autowire-candidate="alse> v/bean>1. AOP面向切面編程 是一種思想,struts有,spring也有2. 如何用 spring 實現(xiàn) ?1、導入相關的 jar 包2、先定義一個目標類(其中有核心的邏輯,但共同的邏輯 將會通過切面在切入點切入)3、再定義一個切面 Aspect 操作類,在里面寫上要重復切入到 目標的邏輯4、 寫配置文件,關鍵要配置,<aop:config><aop:aspect ref="."><

11、aop:pointcut expression="." id="."></aop:pointcut><aop:before method="." pointcut -ref="."/><aop:after method="." pointcut -ref="."/><aop:after-returning method=" " pointcffltf="。 "/> <aop:a

12、fter-throwing method=" -" pointcurtef="。 "/> </aop:aspect></aop:config>after-returning和after類似,after是在方法邏輯執(zhí)行完執(zhí)行, after-returning 是在方法返回后執(zhí)行, 核心區(qū)別是如果在方法 中產(chǎn)生了異常,after是不會執(zhí)行的,但 after-returning會。 after-throwing 是在遇到異常時執(zhí)行 method 中的方法 <aop:around >定義一個方法,有參數(shù)Proceedin

13、gJoinPoint ,在里面寫上前置、后置的邏輯, 并在之間調(diào)用 ceed(), 也可以靈活的通 過條件判斷決定是否要調(diào)用 ceed().proceed ()的返回值就是方法的返回值jp.getArgs() 返回一個 Object 數(shù)組,就是被代理的方法的參數(shù) 值(如果根本沒有參數(shù),就返回一個長度為0 的數(shù)組 )注解 AOP*在配置文件中 <aop:aspectj-autoproxy/> 激活自動代理 <context:component-scan base-package="com.oracleoaec"> *在切面類 (

14、比如剛才那個例子中就是FileOperation) 的類定義上面寫上 Aspect 注解 ,然后在這個切面類的方法上定義注 解,前置注解Before,后置注解After,環(huán)繞注解Around。 在這些注解里面還可以定義切入點point-cut,并寫上類似表達式。AOP 的基石 動態(tài)代理模式代理模式一、靜態(tài)代理被代理類 (目標類 )代理類1、目標類和代理類具有相同的接口2、代理類中定義有一個屬性, 類型就是目標類 (或者說代理類 持有一個目標類對象的引用 )3、代理類的接口方法中會調(diào)用目標類的接口方法,并在其 基礎上添加一定的額外功能靜態(tài)代理必須事先知道目標類,才能再定義代理類二、動態(tài)代理1、

15、JDK 自帶動態(tài)代理功能,InvocationHandler 接口、Proxya、 定義一個類實現(xiàn)InvocationHandler,并實現(xiàn)其抽象方法,并 傳入被代理的對象(目標對象)b、Proxy.newProxylnstance(.)創(chuàng)建代理對象所謂動態(tài)代理,就是在定義代理邏輯時,根本不需要知道未來被代理的是什么類,什么方法而靜態(tài)代理必須事先知道一些信息注意:JDK的動態(tài)代理的目標類,必須實現(xiàn)接口2、cglib動態(tài)代理,目標類完全可以不實現(xiàn)任何接口a、定義一個類實現(xiàn) Methodinterceptor接口,實現(xiàn)其抽象方法b、創(chuàng)建一個Enhancer對象調(diào)用其setSuperClass方法,

16、傳入被代理的目標類調(diào)用setCallback方法,傳入a中定義的類的實例,也就是要 回調(diào)的代理邏輯c、調(diào)用這個Enhancer對象的create方法,產(chǎn)生一個代理對象l. spring和數(shù)據(jù)庫spring可以用 bean的方式配置數(shù)據(jù)源datasourcedbcp、c3p0、純jdbc(也勉強可以算一種數(shù)據(jù)源,只是沒有連接池而已 ) 配置完后,可以像之前普通類一樣通過 getBean 取出連接池 對象。再用 getConnection() 獲取連接 spring提供了默認的模板 JdbcTemplate來處理大量重復的 jdbc 操作,這個 JdbcTemplate 也可以注冊在 applic

17、ationContext.xml 文件中,注冊成一個 bean, 而這個 JdbcTemplate的 bean內(nèi)部又要包含一個 DataSource 的 bean, 比如類似 :<property name="driverClass" value="$jdbc.driverClassName"/><property name=j"dbcUrl"value="$jdbc.url"/><property name="user"value="$jdbc.user

18、name"/> <property name="password"value="$jdbc.password"/> </bean><context:property-placeholder location=j"perties"/> <bean id="jdbcTempldate" class=""><property name="dataSource"ref="dataSource

19、"></property> </bean></bean> 以上標簽就將數(shù)據(jù)源裝配jdbc 的模板上。2. 模板包含數(shù)據(jù)源,而一般Dao 包含模板對象<bean id="xxxDao" class=""><property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean>ref 中的 jdbcTemplate 表示上下文中定義的模板 bean 的 idname中的jdbcTemplate表

溫馨提示

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

評論

0/150

提交評論