springboot引入切入点表达式

1、pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <version>2.1.6.RELEASE</version>
</dependency>

2、切入点处理类 

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class WebPoint {
    @Pointcut("execution(public * com.subject.controller..*.*(..))")
    public void webLog(){}
    
    // @Before在之前执行,@After在之后执行
    @Before("webLog()")   // webLog() 为上面那个方法
    public void before(JoinPoint joinPoint) {
        // 获取注解
        final MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        final Annotation[] annotations = signature.getMethod().getAnnotations();
        System.out.println("进入了切入点,可以在里面做逻辑处理");
    }
    
    //@Around注解 环绕执行,就是在调用之前和调用之后,都会执行一定的逻辑,放行要调此  Object result = jointPoint.proceed();
    @Around("execution(* com.wqy.sport.friends.controller.FriendsControllerEG.friendsAllMet(..))")
    public Object aroundMethod(ProceedingJoinPoint jointPoint) throws Throwable {
        System.err.println(" 目标方法前执行 " );
        
        Object result = jointPoint.proceed();  //调用执行目标方法(result为目标方法执行结果),必须有此行代码才会执行目标调用的方法
        
        System.err.println(" 目标方法后执行 " );
        
        // 获取request和response
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        // 如果不想返回执行结果执行以下方法
        response.getWriter().print(JSON.toJSONString(new ResultVo(401, "禁止访问!")));
        return null;
        // return result;
    }
}

3、自定义注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Good {
    String value() default "";

    String argNames() default "";

    String abc();
}

切入点只拦截注解

    @Before("@annotation(good)")   // webLog() 为上面那个方法
    public void before(JoinPoint joinPoint,Good good) {
        System.out.println(good);
        System.out.println("进入了切入点,可以在里面做逻辑处理");
    }

 

 

posted @ 2021-11-30 09:42  得好好活  阅读(243)  评论(0)    收藏  举报