pointcut定义:
execution(* cn.javacoder.aop.AopTest.test(..)) and bean(b123)
*表示任意的返回值
..表示任意参数
当id=b123的AopTest的test方法执行的时候,应用advice。
Aop的典型配置
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="performance"expression=
"execution(* com.springinaction.springidol.Performer.perform(..))"/>
<aop:before pointcut-ref="performance" method="takeSeats" />
</aop:aspect>
</aop:config>
在Performer.perform()方法执行之前执行audience.takeSeats()方法。
around AOP的配置
public void watchPerformance(ProceedingJoinPoint ? joinpoint){
try {
//before advisor 逻辑
joinpoint.proceed();
//after advisor 逻辑
} catch(Throwable t){
//after throwing 逻辑
}
}
向advice传递参数
<aop:pointcut args(throughts)/>
<aop:before arg-names="throughts"/>
intruduction的使用
<aop:aspect>
<aop:declare-parents
types-matching="com.springinaction.springidol.Performer+"
implement-interface="com.springinaction.springidol.Contestant"
default-impl="com.springinaction.springidol.GraciousContestant"
/>
</aop:aspect>
default-impl能被delegate-ref替换,default-impl指定完整的类名,delegate-ref指定bean ID
基于注解的aspects
Posted in: spring practise
Comments are closed.