自学内容网 自学内容网

Spring AOP - 自定义注解实现共性需求

在pom文件中引入依赖

 <!--Spring切面类底层的依赖-->
<dependency>
     <groupId>org.aspectj</groupId>
     <artifactId>aspectjweaver</artifactId>
     <version>1.9.7</version>
</dependency>

构建自定义注解

//注解的作用目标,表示该注解用在方法上
@Target(ElementType.METHOD)
//注解的保留时间,表示注解在运行时保留
@Retention(RetentionPolicy.RUNTIME)
//@interface:用来说明是个注解类
public @interface MethodExporter {
}

切面类

//说明当前对象是个切面
@Aspect
//将当前对象交给Spring IOC实例化并管理
@Component
//用于打印日志
@Slf4j
public class MethodExporterAspect {
    //@Around环绕通知,最强大的通知类型,可以控制方法入参、执行、返回结果等各方面细节
    //里面的表达式@annotation用来说明某个方法上书写了MethodExporter注解的话就会执行下面的方法
    //对目标方法进行增强
    @Around("@annotation(com.meteorological.aop.MethodExporter)")
    public Object methodExporter(ProceedingJoinPoint joinPoint) throws Throwable{
        long st = System.currentTimeMillis();
        //joinPoint:连接点;执行目标方法,获取返回值; proceed:继续进行
        Object proceed = joinPoint.proceed();
        long et = System.currentTimeMillis();

        ObjectMapper mapper = new ObjectMapper();
        //将入参JSON序列化
        String jsonParam = mapper.writeValueAsString(joinPoint.getArgs());
        //将返回结果JSON序列化
        String jsonResult = null;
        if (proceed!=null){
            jsonResult = mapper.writeValueAsString(proceed);
        }else {
            jsonResult = "null";
        }
        //模拟上报过程
        log.info("正在上报服务器调用过程:\ntarget:{}.{}()\nexecution:{}ms,\nparameter:{}\nresult:{} "
                ,joinPoint.getTarget().getClass().getSimpleName()
                ,joinPoint.getSignature().getName()
                ,(et-st)
                ,jsonParam
                ,jsonResult);

        return proceed;
    }
}

测试自定义注解

@RestController
@RequestMapping(value = "/aopTest")
public class TestController {

  @MethodExporter
  @RequestMapping(value = "/insert")
  public Result<Object> insert( String str) {
    return Result.success("insert " + str);
  }
}

输出结果,成功使用AOP+自定义注解的方式增强方法

target:TestController.insert()
execution:4ms,
parameter:["str123"]
result:{"code":0,"msg":"success","data":"insert str123"} 

原文地址:https://blog.csdn.net/weixin_43732943/article/details/140296915

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!