spring_6
1:
AOP中的概念:
Aspect(切面)
:指橫切性關注點的抽象即為切面,它與類類似,只是兩者關注點不一樣,類是對物體特征的抽象,而切面是橫切性關注點的抽象。
joinpoint(連接點)
:所謂連接點是指那些被攔截到的點。在spring中,這些點指的是方法,因為spring只支持方法類型的連接點,實際上joinpoint還可以是field或類構造器。
Pointcut(切入點)
:所謂切入點是指我們要對那些joinpoint進行攔截的定義。
Advice(通知)
所謂通知是指攔截到joinpoint之后所要做的事情就是通知。通知分為前置通知,后置通知,異常通知,最終通知,環繞通知。
Target(目標對象)
:代理的目標對象
Weave(織入)
:只講aspects應用到target對象并導致proxy對象創建的過程成為織入。
Introduction(引入)
:在不修改類代碼的前提下,Introduction可以再運行期為類動態的添加一些方法或Field
2:
加入Spring AOP的支持
(1):加入jar包,在配置文件中導入aop命名空間,加入<aop:aspectj-autoproxy/>元素
(2):定義切面類
(3):在切面類中加入注解:
: 在類前的注解
@Aspect
: 聲明一個切入點
@Pointcut("execution(* cn.itcast.service..*.*(..))")
private void anyMethod() {} // 定義切入點的名稱是通過方法的定義來定義的.
:定義前置通知
@Before("anyMethod() && args(userName)") 其中 userName 為限制方法的參數必須為String 類型的
public void doAccessCheck(String userName) {}
:定義后置通知
@AfterReturning(pointcut="anyMethod()",returning="revalue")
public void doReturnCheck(String revalue) {}
:定義例外通知
@AfterThrowing(pointcut="anyMethod()",throwing="ex")
public void doExceptionAction(Exception ex){}
:定義最終通知
@After("anyMethod()")
public void doReleaseAction() {}
:環繞通知
@Around("anyMethod()")
public doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
以上 anyMethod() 為切入點的名稱, 為要應用的切入點
args 、returning、throwing 為可不定義的可選參數,但被標注方法也要跟著參數的有無而改變方法的參數.
環繞通知的方法的簽名是死格式
3:
把類加入Spring管理:
在Spring配置文件中加入或用 @Component 組件注解進行標注即可.
4:
通知流程圖:
// 環繞通知
// 前置通知
try{
// 方法執行
// 后置通知
}catch(Exception e){
// 例外通知
}finally{
// 最終通知
}
5:
第 19 集
posted on 2011-01-05 20:59 calmJava 閱讀(198) 評論(0) 編輯 收藏 所屬分類: Spring