javascript
Spring AOP学习笔记
需明確的幾個概念:
l???????? 通知(Advice):用于告知系統將有哪些新的行為。
l???????? 切入點(Pointcut):定義了通知應該在應用到那些連接點。
l???????? 目標對象(Target):被通知的對象。
l???????? 代理(Proxy):將通知應用到目標對象后創建的對象。
?
Spring有兩種代理創建方式:
1.??? ?如果目標對象實現了一個或多個接口暴露的方法,Spring將使用JDK的java.lang.reflect.Proxy創建代理。這個類讓Spring動態產生一個新的類,它實現了所需的接口,織入了通知,并且代理目標的所有請求。(這篇主要介紹這個方式)
2.??? 如果目標對象沒有實現任何接口,Spring使用CGLIB庫生成目標對象的子類。在創建這個子類的時候,Spring將通知織入,并且將對目標對象的調用委托給這個子類。
?
下面以一個實例說明Spring AOP的基本開發方法:
一.創建通知
Spring連接點模型是建立在方法攔截上,這意味著你編寫的
Spring通知會在方法調用周圍的各個地方織入系統中。
圖1
TestAopServiceAdvice實現了接口MethodBeforeAdvice(前置通知),并實現它的惟一的方法before,這個類就可以在調用目標對象前被調用。同樣的還有AfterReturningAdvice(后置通知),MethodInterceptor(環繞通知),異常通知(ThrowsAdvice),引入通知等。
在這個方法中我們輸出了一個字符串TestAopServiceAdvice,用于驗證這個方法是否在目標對象前調用了。
注意:我們無法改變before方法中的參數args和target中的值,args中存的是原來要傳入目標對象的變量,target即指目標對象。
?
二.配置Spring XML配置文件
要在Spring中實現AOP,一般情況下需要配置4個bean:
1.??? 目標對象(target)
2.??? 通知(advice)
3.??? 切入點(pointcut)
4.??? 代理(proxy)
圖2
切入點又分為靜態切入點和動態切入點
l???????? 靜態切入點的意思是通知總是被執行,也是最常用的一種切入點。
l???????? 動態切入點根據運行時方法的參數值決定通知是否被執行。
在圖2中,定義了使用了一個Spring提供的靜態切入點
NameMatchMethodPointAdvisor,它保證了當被調用的方法的名字與給出的映射名字相匹配的時候,這個切入點才匹配。
Spring提供的另一個靜態切入點為RegexpMethodPointcutAdvisor,讓你可以利用正則表達式來定義切入點,正則表達式需要jakarta-oro.jar包的支持。
?
使用ProxyBeanFactory可以創建一個被通知的類,即代理對象。它的最常用的三個控制行為的屬性是:
l???????? proxyInterfaces:代理應該實現的接口列表。
l???????? interceptorNames:需要應用到目標對象上的通知Bean的名字。可以是攔截器、Advisor或其他通知類的名字。
注:在用容器的getBean方法時,應該是getBean(代理類的名字),而不是getBean(目標對象的名字),否則AOP無法工作。
轉載于:https://www.cnblogs.com/springMVC/archive/2007/08/24/2204671.html
總結
以上是生活随笔為你收集整理的Spring AOP学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 表单提交中Get和Post方式的区别及E
- 下一篇: JavaScript命名空间namesp