import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class BusinessHistory {
/* 连接点(定义一个类包含以下方法):
* public String list(String u){
//this.
System.out.println("list(String u)");
return "return list(String u)";
}*/
/*切面(定义一个类):
*
*(1)切入点:
*@Pointcut("execution(* com.tb.app.cf.servicex.emp.*.* (..))") public void
* pointcutA(){ }
*
*切入点表达式(详见spring开发手册核心技术部分):
a. "execution(* com.tb.app.cf.servicex.emp.*.*(..))" emp包下的所有方法
b. "execution(* com.CfDimissionLogManager.*(..))" CfDimissionLogManager类的所有方法
c. "execution(* com.service.save(..))" service包下方法名为save,参数个数任意
d. "execution(* org.service.*.*())" 限定service包中任意类任意不带参数的方法名
e. "execution(* org.service.*.*(..)) && args(n,..)
限定service包中任意类任意方法名任意参数个数,并且传入通知的第一个参数名为n,作为通知的参数名n.
注:execution(* org.service.*.*(..)) && args(n,..) 报错,因为args限定有参,但execution限定无参.所以冲突.
f. @AfterReturning(value="execution(* org.springside.helloworld.service.UserManager.list(..))&& args(u1)",
argNames="u", //注:尽量不要使用argNames,采用args(..)
returning="retVal")
*
*(2)通知:
/*@AfterReturning(value="execution(* org.service.*.*(..))"
returning="retVal") //限定service包中,任意类任意方法名任意参数个数,但须有返回值的方法
//参数retVal必须与returning值retVal一致,但retVal可与连接点返回值类型一致,名字可不同
public void adviceA(String retVal) {
System.err.println(retVal);
}*/
@AfterReturning(value="execution(* org.springside.helloworld.service.UserManager.list(..))&& args(u1)",
returning="retVal")
public void adviceA(String retVal,String u1) {
System.err.println("return:"+retVal);
System.err.println("param:"+u1);
}
}
posted on 2010-04-07 10:01
紫蝶∏飛揚↗ 阅读(773)
评论(0) 编辑 收藏 所属分类:
Spring