execution() 是最常见的切点函数,语法形式为
excution( <修饰符模式> ? <返回类型模式> <方法名模式> ( <参数模式> ) <异常模式> ?) 异常模式> 参数模式> 方法名模式> 返回类型模式> 修饰符模式>
实例代码
1 package com.aop.learn.aspectj; 2 3 import org.aspectj.lang.annotation.Aspect; 4 import org.aspectj.lang.annotation.Before; 5 import org.springframework.stereotype.Component; 6 7 /** 8 * @author songshuiyang 9 * @title: execution() 实例10 * @description:11 * @date 2017/11/1812 */13 @Aspect14 @Component15 public class ExecutionAspect {16 17 /**18 * 匹配所有目标类的public方法19 */20 @Before("execution(public * *(..))")21 public void beforeAspect(){22 23 }24 /**25 * 匹配所有以To为后缀的方法26 */27 @Before("execution(* *To(..))")28 public void beforeAspect1(){29 30 }31 /**32 * 匹配Waiter接口中的所有方法33 */34 @Before("execution(* com.aop.learn.service.Writer.*(..))")35 public void beforeAspect2(){36 37 }38 /**39 * 匹配Waiter接口中及其实现类的方法40 */41 @Before("execution(* com.aop.learn.service.Writer+.*(..))")42 public void beforeAspect3(){43 44 }45 /**46 * 匹配 com.aop.learn.service 包下所有类的所有方法47 */48 @Before("execution(* com.aop.learn.service.*(..))")49 public void beforeAspect4(){50 51 }52 /**53 * 匹配 com.aop.learn.service 包,子孙包下所有类的所有方法54 */55 @Before("execution(* com.aop.learn.service..*(..))")56 public void beforeAspect5(){57 58 }59 /**60 * 匹配 包名前缀为com的任何包下类名后缀为ive的方法,方法必须以Smart为前缀61 */62 @Before("execution(* com..*.*ive.Smart*(..))")63 public void beforeAspect6(){64 65 }66 /**67 * 匹配 save(String name,int age) 函数68 */69 @Before("execution(* save(String,int))")70 public void beforeAspect7(){71 72 }73 /**74 * 匹配 save(String name,*) 函数 第二个参数为任意类型75 */76 @Before("execution(* save(String,*))")77 public void beforeAspect8(){78 79 }80 /**81 * 匹配 save(String name,..) 函数 除第一个参数固定外,接受后面有任意个入参且入参类型不限82 */83 @Before("execution(* save(String,..))")84 public void beforeAspect9(){85 86 }87 /**88 * 匹配 save(String+) 函数 String+ 表示入参类型是String的子类89 */90 @Before("execution(* save(String+))")91 public void beforeAspect10(){92 93 }94 }