execution函数用于匹配方法执行的链接点,语法为:函数
execution(方法修饰符(可选) 返回类型 方法名(参数) 异常模式(可选))继承
参数部分容许使用通配符:io
* 匹配任意字符,但只能匹配一个元素扩展
.. 匹配任意字符,能够匹配任意多个元素,表示类时,必须和*联合使用object
+ 必须跟在类名后面,如Superman+,表示类自己和继承或扩展指定类的全部类service
示例中的* run(..)解读为:语法
方法修饰符 无方法
返回类型 *匹配任意数量字符,表示返回类型不限im
方法名 run表示匹配名称为run的方法demo
参数 (..)表示匹配任意数量和类型的输入参数
异常模式 不限
例如1:
定义切入点表达式 execution (* com.demo.service.impl..*.*(..))
一、execution(): 表达式主体。
2.、方法修饰符 无
三、第一个*号:表示返回类型,*号表示全部的类型。
四、包名:表示须要拦截的包名,后面的两个句点表示当前包和当前包的全部子包,com.demo.service.impl包、子孙包下全部类的方法。
五、第二个*号:表示类名,*号表示全部的类。
六、*(..):最后这个星号表示方法名,*号表示全部的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
七、异常模式 不限
例如2:
execution(* com..*.*Dao.find*(..))
匹配包名前缀为com的任何包下类名后缀为Dao的方法,方法名必须以find为前缀。如com.baobaotao.UserDao findByUserId()、com.baobaotao.dao.ForumDao findById()的方法都匹配切点
例如3:
execution(* joke(Object+)))
匹 配目标类中的joke()方法,方法拥有一个入参,且入参是Object类型或该类的子类。它匹配joke(String s1)。若是咱们定义的切点是execution(* joke(Object)),则只匹配joke(Object object)而不匹配joke(String cc)