切入点:要进行增强的方法
切入点表达式:要进行增强的方法的描述方式
¤ 描述方式一:对接口的方法进行描述
¤ 描述方式二:对实现类的方法进行描述
切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数) 异常名)
¤ 动作关键字:描述切入点的行为动作。例: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*
¤ 参数规则较为复杂,根据业务方法灵活调整
¤ 通常不使用异常做为匹配规则