3.12 @Pointcut的表达式-args
戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
[查看视频教程]
限制匹配连接点(使用 Spring AOP 时执行方法),其中 arguments 是给定类型的实例。
这个很好理解,就是在所有的joint point (连接点)中匹配指定参数类型和个数的方法进行匹配。
官方案例:
1 args(java.io.Serializable)
我们的例子:
我们修改BookService类,添加一个重载sageBook方法:
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Component 7 public class BookService{ 8 //一个String类型参数的方法 9 public void saveBook(String title){ 10 System.out.println("保存图书:"+title); 11 } 12 //一个String类型,一个int类型参数的方法 13 public void saveBook(String title,int count){ 14 System.out.println("保存"+title+","+count+"次"); 15 } 16 }
修改的Aspect类:
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Component //将当前bean交给spring管理 7 @Aspect //定义为一个AspectBean 8 public class DkAspect { 9 //使用args指定对应参数类型的切入点,匹配两个参数一个Stirng和一个int类型的方法 10 @Pointcut("args(String,int)") 11 private void pointCut1(){} 12 //定义一个前置通知 13 @Before("pointCut1()") 14 private static void befor(){ 15 System.out.println("---前置通知---"); 16 } 17 }
测试:
1 @Test 2 public void testAopPointCutArgs(){ 3 ApplicationContext ac = 4 new AnnotationConfigApplicationContext(Appconfig.class); 5 BookService bean = ac.getBean(BookService.class); 6 bean.saveBook("论一个假发程序员的修养"); 7 bean.saveBook("java从入门到颈椎康复之路",10); 8 }
结果:
我们会发现一个参数的seveBook没有被增强,两个参数的seveBook被增强。
关于父类和接口情况如下:
@args(指定类型),如果指定类型是接口或者父类,则我们传入接口实现了和其子类,该方法都会匹配。
如果还不明白可以参看视频讲解。
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员