<div class="iteye-blog-content-contain" style="font-size: 14px">
在学习到springaop的过程中,发现大部分的关于aop:before和aop:after的示例
都是无参或一个参数的,
比如:
<aop:before method="before" pointcut="execution(* cn.xxxx..*.*(..))"/>
或
<aop:before method="before" arg-names="param" pointcut="execution(* cn.xxxx..*.*(..)) and args(param)"/>
但当想对多个参数的方法定义切入点和切面却少有示例,通过baidu也没有办法找到。
经过多次尝试,发现如下方式可正确的获取多参数方法的需要的参数。
通知方法代码:
public class DollarPayServiceImpl implements PayService{ @Override public void pay(String str1,String str2) { System.out.println("say by dollar"+str1+str2); } }
切入点代码:
public class LoggingUtils { public void logAfter(Object point,Object point2){ System.out.println("--------------this is logAfter : "+point+point2+"------------"); } }
切面定义:
<!-- 多个参数的切入及参数的获取,获取个数较少时使用args(..,str2) --> <aop:after pointcut="execution(* com.dz.common.testAOP..*.pay(java.lang.String,java.lang.String)) and args(str1,str2)" method="logAfter(java.lang.Object,java.lang.Object)" arg-names="str1,str2"/>
如此所有的开发工作已经完成。
测试代码:
@Autowired PayService payService; @Test public void test01(){ payService.pay("s1", "s2"); }
结果如下:
say by dollars1s2
--------------this is logAfter : s1s2------------
</div>