SpringFramework(4)

3AOP

1Aspect-oriented Programming

l         補充OOP

l         分解問題的各個方面(或關係)

l         模塊化關係

l         用法:

?         持久化

?         事務管理

?         安全

?         日誌管理

?         調試

2AOP概念

l         Aspect:模塊化關係(concern

l         Joinpoint:程序執行時的一個點

l         Advice:在具體joinpoint做的動作

l         Pointcut:一個Advice應該激活的指定joinpoint集合

l         Introduction:添加方法或域到Advice類中

3Pointcut

l         一個Advice應該激活的指定joinpoint集合

限制pointcut爲一組target類;靜態pointcuts不需要使用帶參數的方法

4Pointcut實現

l         正則表達式

方法名全路經匹配Perl5正則表達式

5Advice

l         在具體joinpoint做的動作

Spring使用包圍joinpoint的攔截器(Interceptor)鏈來實現Advice

l         例子:

6Advice類型

l         Around Advice(如前面的例子)

l         Before Advice

l         Throws Advice

l         After returning Advice

l         Introduction Advice

7Spring Advisors

l         PointcutAdvisor = Pointcut + Advice

l         每個內建的Advice都有一個Advisor

l         例子:

8ProxyFactory

l         使用ProxyFactory獲得Advised對象

?         定義應用的pointcutsadvices

?         以代理對象返回interceptor

?         使用Java動態代理或CGLIB2(可以代理接口和類)

l         編程方式創建AOP代理

9ProxyFactoryBean

l         用來獲得Bean的代理

l         要代理的Bean

PersonImpl實現Person接口

l         InterceptorsAdvisors

l         代理:

l         使用Bean

?         客戶程序應該獲得person Bean,而不是personTarget

?         可以通過應用程序context或編程方式來訪問

l         如果是代理類而不是接口

?         proxyTargetClass設置爲true,來替代proxyInterfaces

?         代理要擴展target類(由CGLIB來構造)

10AutoProxy

l         自動代理的創建:

?         只要定義targets

?         選擇的Bean會被自動代理

l         不需要爲每個target Bean使用ProxyFactoryBean

11BeanNameAutoProxyCreator

l         使用Bean名選擇targets

12AdvisorAutoProxyCreator

l         自動應用Advisorscontext中的Bean

?         每個Advisor對應一個pointcutadvice

?         如果pointcut應用到Bean,就會被advice攔截

l         有助於保持同一個advice應用到多個事務對象的一致性

l         不可能獲得沒有advised的對象

l         例子:

這個Advisor應用debugInterceptor到任何類的所有get方法

13AOP高級特性

l         元數據驅動的自動代理

l         目標源(TargetSources

?         熱交換目標源:當允許調用者保持他的引用時,允許切換代理的Bean

?         目標源池:維護相同實例的池,在方法激活時釋放對象到池中

發佈了0 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章