切入点:要进行增强的方法

切入点表达式:要进行增强的方法的描述方式

  ¤  描述方式一:对接口的方法进行描述

  ¤  描述方式二:对实现类的方法进行描述

切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数) 异常名)

  ¤  动作关键字:描述切入点的行为动作。例:execution

  ¤  访问修饰符:public private等,可以省略

  ¤  返回值

  ¤  包名

  ¤  类/接口名

  ¤  方法名

  ¤  参数

  ¤  异常名:方法定义中抛出指定异常,可以省略

切入点表达式通配符描述方式

  ¤  *:单个独立的*,代表任意单个值,可以独立出现,也可以作为前辍或者后辍的匹配符出现

    ♦  execution(* com.feiyan.*.UserService.find*(*))  匹配com.feiyan包下的任意包中UserService或接口中所有find开发的带有一个参数的方法

  ¤  ..:两个连续的.,代表任意数量的任意值 ,可以独立出现,常用于简化包名与参数的书写

    ♦  execution(User com..UserService.findById(..))  匹配com包下的任意包中的UserService类或接口中所有findById方法

  ¤  +:专用于匹配子类类型

    ♦  execution(* *..*Service+.*(..))

AOP切入点表达式书写技巧

  ¤  所有代码按照标准规范开发,否则以下技巧全部失效

  ¤  描述切入点通常描述接口,而不描述实现类

  ¤  访问控制修饰符针对接口开发均采用public描述

  ¤  返回值类型对于增删改类使用精确类型加速匹配,对于查询类使用*通配符快速描述

  ¤  包名书写尽量不使用..匹配,效率过低,常用*做单个包描述匹配,或精准匹配

  ¤  接口名/类名书写名称与模块相关的采用*匹配,例如UserService写成*Service

  ¤  方法名书写以动词进行精确匹配,名词采用*匹配,例如getById写成getBy*

  ¤  参数规则较为复杂,根据业务方法灵活调整

  ¤  通常不使用异常做为匹配规则