有时候,我们使用AOP来进行放的增强,编写切面类的时候,需要定位在哪个方法上试用该切面进行增强,本片文章主要讲解两种在SpringBoot中定位切点的方法,一种是使用execution表达式的方法,一种则是利用自定义注解的方法。
接下来以一个简单的例子来讲解这两种方法的使用方式。
<==========方法执行前==========>
method();
<==========方法执行后==========>
execution 表达式
execution表达式的方式主要是在定义切点的时候,通过表达式的方式选取到所需要增强的方法。
execution表达式解读
execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)
类型 | 解读 | 是否必须 | 示例 |
---|---|---|---|
<修饰符模式> | 表示所选的修饰符类型 | 否 | public/private/... |
<返回类型模式> | 表示所选的返回值类型 | 是 | void/int/... |
<方法名模式> | 表示所选的包或者方法 | 是 | com.luke.service/com.luke.controller.*/... |
(<参数模式>) | 表示所选方法的参数 | 是 | *(..)
@Around("operationLog()")
public Object doAround(ProceedingJoinPoint joinPoint) {
Object proceed = null;
try {
System.out.println("方法执行前");
proceed = joinPoint.proceed();
System.out.println("方法执行后");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return proceed;
}
}
此切点的execution表达式为com.luke.springdata.controller包下的所有方法。 测试用Controller类
运行项目,调用该方法,查看结果。
自定义注解的方法
|