import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class BusinessHistory {
/* 連接點(diǎn)(定義一個類包含以下方法):
* public String list(String u){
//this.
System.out.println("list(String u)");
return "return list(String u)";
}*/
/*切面(定義一個類):
*
*(1)切入點(diǎn):
*@Pointcut("execution(* com.tb.app.cf.servicex.emp.*.* (..))") public void
* pointcutA(){ }
*
*切入點(diǎn)表達(dá)式(詳見spring開發(fā)手冊核心技術(shù)部分):
a. "execution(* com.tb.app.cf.servicex.emp.*.*(..))" emp包下的所有方法
b. "execution(* com.CfDimissionLogManager.*(..))" CfDimissionLogManager類的所有方法
c. "execution(* com.service.save(..))" service包下方法名為save,參數(shù)個數(shù)任意
d. "execution(* org.service.*.*())" 限定service包中任意類任意不帶參數(shù)的方法名
e. "execution(* org.service.*.*(..)) && args(n,..)
限定service包中任意類任意方法名任意參數(shù)個數(shù),并且傳入通知的第一個參數(shù)名為n,作為通知的參數(shù)名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包中,任意類任意方法名任意參數(shù)個數(shù),但須有返回值的方法
//參數(shù)retVal必須與returning值retVal一致,但retVal可與連接點(diǎn)返回值類型一致,名字可不同
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
紫蝶∏飛揚(yáng)↗ 閱讀(779)
評論(0) 編輯 收藏 所屬分類:
Spring