springside的文档中有aop的配置;http://wiki.springside.org.cn/display/springside/Spring+Aop
里面有关于pointcut 表达式语言的表述;
里面也有官方文档中文版的链接:http://www.redsaga.com/spring_ref/2.0/html/aop.html
我们用scheme-based aop 配置方式:
<aop:config> ...... </aop:config>
Advisor方式:
假设我们有一个MethodBeforeAdvice 叫TestAdvice
;用于打印将要执行的方面名;
public class TestAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] objects, Object
object)
throws Throwable {
System.out.println("method.getName() = "
+ method.getName());
System.out.println("TestAdvice
testing..." );
}
}
配置如下:
<bean id="testAdvice"
class="biz.pxzit.application.service.TestAdvice"/>
<aop:config>
<aop:advisor pointcut="execution(*
biz..*Mgr.save*(..))"
advice-ref="testAdvice" order="1"/>
......
</aop:config>
order是可选的,指定执行的次序;上面的配置语意是,在执行biz开头的package下面任意以Mgr结尾的manager的save开头的方法时候,执行testAdvice,因为是MethodBeforeAdvice
所以在save开头方法执行前执行;
Aspect方式:
public class TestAdvice2 {
public void goAfter(JoinPoint joinPoint) throws Throwable {
System.out.println("TestAdvice2.goAfter
testing..."+joinPoint.getTarget());
System.out.println("TestAdvice2.goAfter
testing..." );
}
}
配置如下:
<bean id="testAdvice2"
class="biz.pxzit.application.service.TestAdvice2"/>
<aop:config>
......
<aop:aspect
id="ddAspect" ref="testAdvice2">
<aop:after
method="goAfter"
pointcut="execution(* biz..*Mgr.*(..))"
/>
.......
</aop:aspect>
</aop:config>
注意TestAdvice2的方法参数,这里用的是JoinPoint
joinPoint,还有很多细节,具体可以看文档;
要使用<aop:aspect >节点,还需asm.jar
(3个,在springframework的lib下有)否则会报noclassfound
exception;
注意我之前配置的pointcut表达式是错的,正确的是execution(*
biz..*Mgr.*(..))";