深入使用Spring分析_第1頁
深入使用Spring分析_第2頁
深入使用Spring分析_第3頁
深入使用Spring分析_第4頁
深入使用Spring分析_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、深入使用深入使用Spring分析分析 深入使用深入使用Spring 深入使用深入使用Spring分析分析 1 兩種后處理器兩種后處理器 2 Spring的的AOP 3 Spring和其他框架的整合和其他框架的整合 4 本講小結(jié)本講小結(jié) 深入使用深入使用Spring分析分析 Spring 框架提供了很好的擴展性,除了可框架提供了很好的擴展性,除了可 以與各種第三方框架良好整合外,其以與各種第三方框架良好整合外,其IoC 容器也允許開發(fā)者進行擴展。這種擴展并容器也允許開發(fā)者進行擴展。這種擴展并 不是通過實現(xiàn)不是通過實現(xiàn)BeanFactory或或 ApplicationContext的子類,而是通過

2、兩的子類,而是通過兩 個后處理器對個后處理器對IoC容器進行擴展。容器進行擴展。Spring 提供了兩種常用的后處理器:提供了兩種常用的后處理器: Bean后處理器,這種后處理器會對容器中特后處理器,這種后處理器會對容器中特 定的定的Bean進行定制,例如功能的加強。進行定制,例如功能的加強。 容器后處理器,這種后處理器對容器后處理器,這種后處理器對IoC容器進行容器進行 特定的后處理。特定的后處理。 深入使用深入使用Spring分析分析 Bean后處理器是一種特殊的后處理器是一種特殊的Bean,這種特殊,這種特殊 的的Bean并不對外提供服務,它無須并不對外提供服務,它無須id屬性,但屬性,

3、但 它負責對容器中的其他它負責對容器中的其他Bean執(zhí)行后處理,例執(zhí)行后處理,例 如為容器中的目標如為容器中的目標Bean生成代理。這種生成代理。這種Bean 可稱為可稱為Bean后處理器,它在后處理器,它在Bean實例創(chuàng)建成實例創(chuàng)建成 功后,對其進行進一步的加強處理。功后,對其進行進一步的加強處理。 Bean后處理器必須實現(xiàn)后處理器必須實現(xiàn)BeanPostProcessor 接口。接口。 深入使用深入使用Spring分析分析 實際操作演示實際操作演示 深入使用深入使用Spring分析分析 容器后處理器則負責后處理容器本身。容器后處理器則負責后處理容器本身。 容器后處理器必須實現(xiàn)容器后處理器必

4、須實現(xiàn) BeanFactoryPostProcessor接口。實現(xiàn)該接接口。實現(xiàn)該接 口必須實現(xiàn)如下一個方法:口必須實現(xiàn)如下一個方法: void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) 實現(xiàn)該方法的方法體就是對實現(xiàn)該方法的方法體就是對Spring容器進行的容器進行的 處理,這種處理可以對處理,這種處理可以對Spring容器進行任意的容器進行任意的 擴展,當然也可以對擴展,當然也可以對Spring容器不進行任何處容器不進行任何處 理。理。 深入使用深入使用Spring分析分析 Spring已提供如下兩

5、個常用的容器后處理已提供如下兩個常用的容器后處理 器,包括:器,包括: PropertyResourceConfigurer,屬性占位符,屬性占位符 配置器。配置器。 PropertyPlaceHolderConfigurer,另一種,另一種 屬性占位符配置器。屬性占位符配置器。 深入使用深入使用Spring分析分析 1 兩種后處理器兩種后處理器 2 Spring的的AOP 3 Spring和其他框架的整合和其他框架的整合 4 本講小結(jié)本講小結(jié) 深入使用深入使用Spring分析分析 AOP:Aspect-Oriented Programming OOP: Object-Oriented Pro

6、gramming AOP可以彌補可以彌補OOP的不足。的不足。 AOP的核心思想:將應用程序的商業(yè)邏輯的核心思想:將應用程序的商業(yè)邏輯 同對其提供的支持的通用服務進行分離。同對其提供的支持的通用服務進行分離。 深入使用深入使用Spring分析分析 AOP:面向切面的編程:面向切面的編程 AOP的實現(xiàn)原理:動態(tài)代理的實現(xiàn)原理:動態(tài)代理 配置方式配置方式 用用AspectJ配置配置 用用XML配置配置 深入使用深入使用Spring分析分析 切面(切面(aspectaspect) 切面是你要實現(xiàn)的交叉功能。就是通知和切入點的結(jié)合。通知和切入點共切面是你要實現(xiàn)的交叉功能。就是通知和切入點的結(jié)合。通知和

7、切入點共 同定義了關(guān)于切面的全部內(nèi)容:它的功能、在何時和何地完成功能。同定義了關(guān)于切面的全部內(nèi)容:它的功能、在何時和何地完成功能。 通知(通知(AdviceAdvice) 通知定義了切面是什么以及何時使用。除了描述切面要完成的工作,通知通知定義了切面是什么以及何時使用。除了描述切面要完成的工作,通知 還解決了何時執(zhí)行這個工作的問題。應該在一個方法被調(diào)用之前?之后?還解決了何時執(zhí)行這個工作的問題。應該在一個方法被調(diào)用之前?之后? 或者拋出異常時?;蛘邟伋霎惓r。 切入點(切入點(pointcutpointcut) 如果說通知定義了切面的如果說通知定義了切面的“什么什么”和和“何時何時”,那么切入

8、點就定義了,那么切入點就定義了“何何 地地”。 連接點(連接點(joinpointjoinpoint) 連接點是應用程序執(zhí)行過程中能夠插入切面的地點。這些點可以是方法被連接點是應用程序執(zhí)行過程中能夠插入切面的地點。這些點可以是方法被 調(diào)用時、異常拋出時、甚至字段被編輯時調(diào)用時、異常拋出時、甚至字段被編輯時 深入使用深入使用Spring分析分析 引入(引入(IntrductionIntrduction) 引入允許你為已經(jīng)存在的類添加新方法和屬性。比如一個引入允許你為已經(jīng)存在的類添加新方法和屬性。比如一個AuditableAuditable通通 知類,記錄對象在最后一次被修改時的狀態(tài)。只需要一個知

9、類,記錄對象在最后一次被修改時的狀態(tài)。只需要一個 setLastModified(Date)setLastModified(Date)方法,和一個實例變量來保存這個狀態(tài)。這個方法,和一個實例變量來保存這個狀態(tài)。這個 新方法和實例變量就可以被引入到現(xiàn)有的類,從而在不修改它們的情況新方法和實例變量就可以被引入到現(xiàn)有的類,從而在不修改它們的情況 下,讓他們具有新的行為和狀態(tài)。下,讓他們具有新的行為和狀態(tài)。 目標對象(目標對象(TargetTarget) 目標對象是被通知的對象。目標對象是被通知的對象。 代理(代理(ProxyProxy) 代理是將通知應用到目標對后創(chuàng)建的對象。代理是將通知應用到目標對

10、后創(chuàng)建的對象。 織入(織入(weavingweaving) 織入是將切面應用到目標對象從而創(chuàng)建一個新的代理對象的過程??椚胧菍⑶忻鎽玫侥繕藢ο髲亩鴦?chuàng)建一個新的代理對象的過程。 在在 目標對象的生命周期里有多個機會發(fā)生織入過程。比如編譯時、類加載目標對象的生命周期里有多個機會發(fā)生織入過程。比如編譯時、類加載 時、運行時。時、運行時。 深入使用深入使用Spring分析分析 經(jīng)典的基于代理的經(jīng)典的基于代理的AOP(各版本(各版本Spring) AspectJ注解驅(qū)動的切面(僅注解驅(qū)動的切面(僅Spring 2.0); 純純POJO切面(僅切面(僅Spring2.0); 注入式注入式AspectJ切

11、面(各版本切面(各版本Spring) 深入使用深入使用Spring分析分析 通知類型通知類型接口接口 Beforeorg.springframework.aop.MethodBeforeAdvice After-returningorg.springframework.aop.AfterReturningAdvice After-throwingorg.springframework.aop.ThrowsAdvice Aercept.MethodInterceptor Introductionorg.springframework.aop.Int

12、roductionInterceptor 深入使用深入使用Spring分析分析 代理模式的作用:為其他對象提供一種代理,代理模式的作用:為其他對象提供一種代理, 以控制對這個對象的訪問。以控制對這個對象的訪問。 代理模式一般設計到的角色:代理模式一般設計到的角色: 抽象角色:聲明真實對象和代理對象的共同接口;抽象角色:聲明真實對象和代理對象的共同接口; 代理角色:內(nèi)部含有對真實對象的引用;代理角色:內(nèi)部含有對真實對象的引用; 真實角色:最終要引用的角色。真實角色:最終要引用的角色。 代理分為靜態(tài)代理和動態(tài)代理。代理分為靜態(tài)代理和動態(tài)代理。 深入使用深入使用Spring分析分析 程序結(jié)構(gòu)程序結(jié)構(gòu)

13、 深入使用深入使用Spring分析分析 Subject RealSubject ProxySubject Client 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 靜態(tài)代理模式要求每個代理對象必須對應靜態(tài)代理模式要求每個代理對象必須對應 一個真實對象,在實際應用中會造成代碼一個真實對象,在實際應用中會造成代碼 量的急劇增大;量的急劇增大; 使用動態(tài)代理可以消除靜態(tài)代理的弊端;使用動態(tài)代理可以消除靜態(tài)代理的弊端; Spring AOP的底層實現(xiàn)主要使用了動態(tài)的底層實現(xiàn)主要使用了動態(tài) 代理。代理。 深入使用深入使用Spring分析分析 運行時生成的類。運行時生成的類

14、。 在生成動態(tài)代理類時必須提供一組在生成動態(tài)代理類時必須提供一組 interface給它,然后該給它,然后該class就宣稱它實就宣稱它實 現(xiàn)了這些現(xiàn)了這些interface。 java動態(tài)代理類位于動態(tài)代理類位于java.lang.reflect包下包下 ,主要包括兩個:,主要包括兩個: interface InvocationHandler Proxy 深入使用深入使用Spring分析分析 ) Subject RealSubject 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 用用A

15、OP實現(xiàn)用戶權(quán)限判定功能實現(xiàn)用戶權(quán)限判定功能 程序結(jié)構(gòu)圖程序結(jié)構(gòu)圖 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 深入使用深入使用Spring分析分析 1 兩種后處理器兩種后處理器 2 Spring的的AOP 3 Spring和其他框架的整合和其他框架的整合 4 本講小結(jié)本講小結(jié) 深入使用深入使用Spring分析分析 以以Spring為核心為核心 Struts中定義中定義Action時,其時,其class實際是應實際是應 用用Spring中的中的bea

16、n id Hibernate的配置文件可以省略,數(shù)據(jù)庫的配置文件可以省略,數(shù)據(jù)庫 相關(guān)操作放到相關(guān)操作放到Spring配置文件中配置文件中 注意注意Spring中中bean的作用域設置的作用域設置 深入使用深入使用Spring分析分析 PROPAGATION_REQUIRED: 如果存在一個事務,則支持如果存在一個事務,則支持 當前事務。如果沒有事務則開啟當前事務。如果沒有事務則開啟 。 PROPAGATION_SUPPORTS: 如果存在一個事務,支持當如果存在一個事務,支持當 前事務。如果沒有事務,則非事務的執(zhí)行前事務。如果沒有事務,則非事務的執(zhí)行 。 PROPAGATION_MANDATORY: 如果已經(jīng)存在一個事務,如果已經(jīng)存在一個事務, 支持當前事務。如果沒有一個活動的事務,則拋出異常。支持當前事務。如果沒有一個活動的事務,則拋出異常。 PROPAGATION_REQUIRES_NEW: 總是開啟一個新的事總是開啟一個新的事 務。如果一個事務已經(jīng)存在,則將這個存在的事務掛起。務。如果一個事務已經(jīng)存在,則將這個存在的事務掛起。 PROPAGATION_NOT_SUPPORTED: 總是非事務地執(zhí)行總是非事務地執(zhí)行 ,并掛起任何存在的事務。,并掛起任何存在的事務。 PROPAGATION_NEVE

溫馨提示

  • 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

提交評論