1. Spring中通过切入点表达式定义具体切入点
指示符 | 作用 |
---|---|
bean | 用于匹配指定包名下类型内的方法执行 |
within | 用于匹配指定包名下类型内的方法执行 |
execution | 用于进行细粒度方法匹配执行具体业务 |
@annotation | 用于匹配指定注解修饰的方法执行 |
1.1 bean表达式应用于类级别,实现粗粒度的控制:
bean(“userServiceImpl”)) | 指定一个类中所有方法 |
---|---|
bean("*ServiceImpl") | 指定所有的后缀为serviceImpl的类 |
1.2 Within表达式应用增强 ,应用于类级别
within(“aop.service.UserServiceImpl”) | 指定类,只能指定一个类 |
---|---|
within(“aop.service.*”) | 只包括当前目录下的类 |
within(“aop.service…*”) | 指定当前目录包含所有子目录中的类 |
1.3 execution表达式应用于方法级别,细粒度的控制:
execution(void aop.service.UserServiceImpl.addUser()) | 匹配方法 |
---|---|
execution(void aop.service.PersonServiceImpl.addUser(String)) | 方法参数必须为字符串 |
execution(* aop.service….(…)) | 万能配置 |
1.4 @annotaion表达式应用于方法级别,实现细粒度的控制:
@annotation(com.jt.common.anno.RequestLog)) | 指定一个需要实现增强功能的方法 |
---|
AOP编程中有五种类型的通知:
- 前置通知 (@Before) 方法执行之前执行
- 返回通知 (@AfterReturning) 方法return之后执行
- 异常通知 (@AfterThrowing) 方法出现异常之后执行
- 后置通知 (@After) : 又称之为最终通知(finally)
- 环绕通知 (@Around) :重点
@AfterReturning和@After容易混淆,后置通知和异常通知不会同时出现