随笔-9  评论-168  文章-266  trackbacks-0

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

只有注册用户登录后才能发表评论。


网站导航: