在spring2.0中,aop發生了很大的變化:
主要分為兩大方面
1.支援簡單的aop xml配置
2.支援@
aspectj的注釋
先來看一看第一種情況:
申明乙個aspect,在xml中的申明如下:
...
...
申明pointcut
申明advice
before advice:
pointcut-ref="dataaccessoperation"
method="doaccesscheck"/>
after returning advice:
pointcut-ref="dataaccessoperation"
method="doaccesscheck"/>
...
或者帶有返回引數
pointcut-ref="dataaccessoperation"
returning="retval"
method="doaccesscheck"/>
...
after throwing advice:
pointcut-ref="dataaccessoperation"
method="dorecoveryactions"/>
...
或者帶有throwing
pointcut-ref="dataaccessoperation"
throwing="dataacces***"
method="dorecoveryactions"/>
...
after (finally) advice:
pointcut-ref="dataaccessoperation"
method="doreleaselock"/>
...
around advice:
pointcut-ref="businessservice"
method="dobasicprofiling"/>
...
advice parameters
: pointcut="pointcuts.anypublicmethod() and @annotation(auditable)"
method="audit"
arg-names="auditable"
/>
對於引入介面(introductions):
implement-inte***ce="usagetracked"
default-impl=" service.tracking.defaultusagetracked"/>
and this(usagetracked)"
method="recordusage"/>
前面主要介紹了如何通過xml實現aop程式設計,下面主要介紹如何通過@aspectj來實現。
為了使@aspectj 支援生效,
需要做以下步驟:
在xml
中設定
或者在xml中加入
宣告aspect
package org.xyz;
import org.aspectj.lang.annotation.aspect;
@aspect
public class notveryusefulaspect
宣告pointcut
@pointcut("execution(* transfer(..))")
public void transfer() {} 宣告
advice
before advice:
public void doaccesscheck()
after returning advice:
public void doaccesscheck()
或者
public void doaccesscheck(object retval)
after throwing advice:
@afterthrowing("systemarchitecture.dataaccessoperation()")
public void dorecoveryactions()
或者 @afterthrowing(
pointcut=" systemarchitecture.dataaccessoperation()",
throwing="ex")
public void dorecoveryactions(dataacces***ception ex)
after (finally) advice:
public void doreleaselock()
around advice:
public object dobasicprofiling(
proceedingjoinpoint
pjp) throws throwable
advice parameters:
"args(account,..)"
)
public void validateaccount(account account)
宣告引數名稱:
@before(
value="com.xyz.lib.pointcuts.anypublicmethod() && " +
"@annotation(auditable)",
argnames="auditable"
)
public void audit(auditable auditable)
advice 排序:
一般以宣告的方法次序為先後
不同的
advice
,通過實現
ordered
介面,來排序
introductions
用於引入新的介面
@aspect
public class usagetracking
}
spring aop 2 0 程式設計
在spring2.0中,aop發生了很大的變化 主要分為兩大方面 1.支援簡單的aop xml配置 2.支援 aspectj的注釋 先來看一看第一種情況 申明乙個aspect,在xml中的申明如下 申明pointcut 申明advice before advice pointcut ref data...
spring aop 2 0 程式設計(二)乙個例項
前面這是講了許多的概念,下面以乙個例子來說明 乙個很好理解的aop 例子,也就是日誌服務。先從aop第一種方式來實現,也就是xml配置方式 先建立基本的日誌類 public class logger 這裡只是簡單的乙個方法,當然實際情況可能不同。由於xml配置需要乙個方面的實現bean 所以建立乙個...
Spring AOP 程式設計
package com.xcl.common import org.aspectj.lang.proceedingjoinpoint import org.aspectj.lang.annotation.after import org.aspectj.lang.annotation.afterre...