Spring的AOP切面表达式
Spring中通过切入点表达式定义具体切入点,其常用AOP切入点表达式定义及说明
指示符 | 作用 |
---|---|
bean | 用于匹配指定bean id的的方法执行 |
within | 用于匹配指定包名下类型内的方法执行 |
@annotation | 用于匹配指定注解修饰的方法执行(细粒度) |
execution | 用于进行细粒度方法匹配执行具体业务 |
1.bean应用于类级别,实现粗粒度的控制
bean("userServiceImpl")) //指定一个类
bean("*ServiceImpl") //指定所有的后缀为service的类
2.Within表达式应用增强
/**within应用于类级别,实现粗粒度的切面表达式定义*/
within("aop.service.UserServiceImpl") //指定类,只能指定一个类
within("aop.service.*") //只包括当前目录下的类
within("aop.service..*") //指定当前目录包含所有子目录中的类
3. @annotation表达式应用增强
/**@annotaion应用于方法级别,实现细粒度的控制**/
@annotation("com.ls.anno.ReqLog")) //指定一个需要实现增强功能的方法
4. execution表达式应用增强
/**execution方法级别,细粒度的控制
*语法:execution(返回值类型 包名.类名.方法名(参数列表))*/
execution(void aop.service.UserServiceImpl.addUser()) //匹配方法
execution(void aop.service.PersonServiceImpl.addUser(String)) //方法参数必须为字符串
execution(* aop.service..*.*(..)) //万能配置
execution(public * com.ls.service..*Service*.*(..)) //所有的公共的(public )的方法
切面通知增强
在AOP编程中有五种类型的通知:
1) 前置通知 (@Before) 方法执行之前执行
2) 返回通知 (@AfterReturning) 方法return之后执行
3) 异常通知 (@AfterThrowing) 方法出现异常之后执行
4) 后置通知 (@After) : 又称之为最终(始终要执行)通知(finally)
5) 环绕通知 (@Around) :如上四个一起使用时可以直接使用@Around通知替换