Spring AOP 中@Pointcut的用法(多个Pointcut)
代码语言:javascript复制/**
swagger切面,分开来写
**/
@Aspect
@Component
public class ApiOperationLogAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Pointcut("@annotation(io.swagger.annotations.ApiOperation)")
public void pointcut() {
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) {
}
}
代码语言:javascript复制import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FunctionLog {
String value() default "";
}
/**
自定义切面,分开来写
**/
@Aspect
@Component
public class FunctionLogAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Pointcut("@annotation(com.mytest.insure.annotation.FunctionLog)")
public void pointcut() {
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) {
}
}
Spring Boot AOP @Pointcut拦截注解的表达式与运算符 拦截注解的表达式有3种:@annotation、@within、@target 1、@annotation 匹配有指定注解的方法(注解作用在方法上面) 2、@within 匹配包含某个注解的类(注解作用在类上面) 3、@target 匹配目标对象有指定注解的类(注解作用在类上面) @target 和@within的区别: 1、@target(注解A):判断被调用的目标对象中是否声明了注解A,如果有,会被拦截; 2、@within(注解A): 判断被调用的方法所属的类中是否声明了注解A,如果有,会被拦截; 3、@target关注的是被调用的对象,@within关注的是调用的方法所在的类; @PointCut中的运算符 PointCut中可以使用&&、||、! 运算符
同时匹配方法上的和类上的注解 @Pointcut("@annotation(com.test.aop.demo.MyAnnotation) || @within(com.test.aop.demo.MyAnnotation)") public void cutController(){ } 或者 @Pointcut("@annotation(com.test.aop.demo.MyAnnotation)") public void cutController(){ } @Pointcut("@within(com.test.aop.demo.MyAnnotation)") public void cutService(){ } @Pointcut("cutController() || cutService()") public void cutAll(){ }