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(指定类型),如果指定类型是接口或者父类,则我们传入接口实现了和其子类,该方法都会匹配。

如果还不明白可以参看视频讲解。

posted @ 2020-10-18 16:38  戴着假发的程序员0-1  阅读(847)  评论(0编辑  收藏  举报