spring aop 2 0 程式設計

2021-08-29 04:25:22 字數 3414 閱讀 3207

在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...