Spring AOP 中@Pointcut的用法(多个Pointcut)

2024-10-09 11:13:44 浏览数 (4)

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(){ }

0 人点赞