记录一下我在springBoot中用到的切面方法
环绕切面
目前我用到的环绕切,有三种
-
第一种方法
/** * 根据方法签名进行切面 */ @Around("execution(public * com.example.springboot.web.controller.*.*(..))") public Object fun1(ProceedingJoinPoint point) throws Throwable { // ...(方法执行前的逻辑) Object result = point.proceed(); // ...(方法执行后的逻辑) return result; // or return null; }
-
第二种方法
/** * 根据注解进行切面,不获取注解实例 */ @Around("@annotation(com.example.springboot.MyAnnotation)") public Object fun2(ProceedingJoinPoint point) throws Throwable { // ...(方法执行前的逻辑) Object result = point.proceed(); // ...(方法执行后的逻辑) return result; }
-
第三种方法
/** * 根据注解进行切面,同时获取注解示例 * @param myAnnotation 切点的注解示例,可以从注解中拿到切点注解的配置 */ @Around("@annotation(myAnnotation)") public Object fun3(ProceedingJoinPoint point, MyAnnotation myAnnotation) throws Throwable { // ...(方法执行前的逻辑) Object result = point.proceed(); // ...(方法执行后的逻辑) return result; // or return null; }
后置切面
目前只用到一种
/**
* 后置切面,同时获取方法执行结果
* @param result 就是切点方法的执行结果
*/
@AfterReturning(
value = "execution(public * com.example.springboot.web.controller.*.*(..))",
returning = "result"
)
public Object fun4(JoinPoint point, Object result) throws Throwable {
// ...(方法执行后的逻辑)
return result; // or return null;
}