1.AOP的使用场景

在实际工作中,可能会存在需要在调用方法前后调用其它接口,例如:
1.调用业务方法前,需要根据头部信息来调用外部接口获取到所需的信息,来决定后续方法执行的逻辑;
2.调用业务方法后,日志信息的记录(请求参数、返回结果、执行时长等)。

2.使用

      第一步:导入依赖:


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

        第二部:创建注解

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JpushAnnotation{
}

        第三部:创建 Aspect

@Aspect
@Component
@Slf4j
public class JpushAspect {
    @Autowired
    private AsyncService asyncService;
    //切入点:待增强的方法
    @Pointcut("@annotation(com.jpush.anoaspect.JpushAnnotation)")
    //切入点签名
    public void log(){
        System.out.println("pointCut签名。。。");
    }
    //前置通知
    @Before("log()")
    public void deBefore(JoinPoint jp) throws Throwable {
    }


    //返回通知
    @AfterReturning(returning = "ret", pointcut = "log()")
    public void doAfterReturning(Object ret) throws Throwable {
//        // 处理完请求,返回内容
//        System.out.println("返回通知:方法的返回值 : " + ret);
    }

    //异常通知
    @AfterThrowing(throwing = "ex", pointcut = "log()")
    public void throwss(JoinPoint jp,Exception ex){
//        System.out.println("异常通知:方法异常时执行.....");
//        System.out.println("产生异常的方法:"+jp);
//        System.out.println("异常种类:"+ex);
    }

    //后置通知
    @After("log()")
    public void after(JoinPoint jp){

    }
}

注意:@Pointcut("@annotation(com.ruoyi.framework.anoaspect.JpushAnnotation)")为刚刚创建创建的JpushAnnotation的相对路径,需自行修改为自己的目录。代码中方法的实现自行编写即可

        第四部:使用

     
    @JpushAnnotation
    public Boolean insertByBo() {
       
    }

在需要切入的地方加入注解

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐