Spring AOP切面程式設計

2021-10-25 17:47:57 字數 3963 閱讀 5806

切面表示式:

execution

([修飾符] 返回值型別 包.類.方法(引數列表));

1:完全寫法

execution

(public

void com.syy.xml_aop.userimpl.

work

(int))

;2:-修飾符省略

execution

(void com.syy.xml_aop.userimpl.

work

(int))

;3:簡化2

-返回值型別寫萬用字元

execution

(* com.syy.xml_aop.userimpl.

work

(int))

;4:簡化3

-包名寫萬用字元

execution(*

*.*.*.userimpl.

work

(int))

;5:簡化4

-包名萬用字元簡化

execution(*

*..userimpl.

work

(int))

;6:簡化5

-類名萬用字元

execution(*

*..*.work

(int))

;7:簡化6

-引數寫萬用字元

execution(*

*..*.work(.

.));

<

aop:config

>

<

aop:pointcutid=

"work"

expression

="execution( * com.syy.service..*.*(..))"

/>

<

aop:aspect

ref=

"advice"

>

<

aop:after

method

="writelog"

pointcut-ref

="work"

/>

aop:aspect

>

aop:config

>

簡化

joinpoint.proceed(); //切到原來的目標方法,進行執行

public

class

advice

public

void

before()

public

void

after()

public

void

afterreturn()

public

void

afterthrow()

}

<

aop:config

>

<

aop:pointcutid=

"all"

expression

="execution( * com.wzx.service..*.*(..))"

/>

<

aop:aspect

ref=

"advice"

>

<

aop:before

method

="before"

pointcut-ref

="all"

/>

<

aop:after-returning

method

="afterreturn"

pointcut-ref

="all"

/>

<

aop:after-throwing

method

="afterthrow"

pointcut-ref

="all"

/>

<

aop:after

method

="after"

pointcut-ref

="all"

/>

aop:aspect

>

aop:config

>

public

void

arround

(proceedingjoinpoint point )

catch

(throwable e)

finally

}

<

aop:config

>

<

aop:pointcutid=

"all"

expression

="execution( * com.wzx.service..*.*(..))"

/>

<

aop:aspect

ref=

"advice"

>

<

aop:around

method

="arround"

pointcut-ref

="all"

/>

aop:aspect

>

aop:config

>

@component

@aspect

public

class

advice

//try

// @before("execution( * com.wzx.service..*.*(..))")

public

void

before()

//@afterreturning("execution( * com.wzx.service..*.*(..))")

public

void

afterreturn()

//catch(exception e)

// @afterthrowing("execution( * com.wzx.service..*.*(..))")

public

void

afterthrow()

//finally

// @after("execution( * com.wzx.service..*.*(..))")

public

void

after()

@around

("execution( * com.wzx.service..*.*(..))"

)public

void

arround

(proceedingjoinpoint point )

catch

(throwable e)

finally

}}

<?xml version="1.0" encoding="utf-8"?>

xmlns

=""xmlns:xsi

=""xmlns:context

=""xmlns:aop

=""xsi:schemalocation

=" /spring-beans.xsd /spring-context.xsd /spring-aop.xsd"

>

<

context:component-scan

base-package

="com.wzx.service"

/>

<

aop:aspectj-autoproxy

/>

beans

>

Spring aop 切面程式設計

package cn.annals.demo.proc.aop import org.aspectj.lang.joinpoint import org.aspectj.lang.proceedingjoinpoint import org.aspectj.lang.annotation.after...

Spring AOP 面向切面程式設計

spring aop aop aspect orient programming 也就是面向切面程式設計 可以這樣理解,物件導向程式設計 oop 是從靜態角度考慮程式結構,面向切面程式設計 aop 是從動態角度考慮程式執行過程。在日常生活中,會遇到各種各樣的中介機構,比如獵頭公司,律師事務所,婚姻介...

Spring AOP面向切面程式設計

最近在系統中需要實現使用者某些操作新增積分,希望實現對系統現有的 進行最小嵌入,因此使用spring aop的切面程式設計將很好實現該需求,達到最小耦合度。在spring aop中的通知都是針對方法層級進行通知,相對與struct中針對類層級通知,具有更好的靈活性。方法攔截 methodinterc...