springboot AOP

·  阅读 179

aop详细介绍自行搜索引擎,本文仅介绍使用

1.引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
复制代码

2.execution表达式

  • 创建测试controller
@GetMapping("getInfo")
public String getInfo(String name, Integer age){
return name + ":" + age;
}
复制代码
  • 创建请求参数打印Aspect
@Aspect
@Component
//lombok日志
@Slf4j
public class LogAspect {

//execution表达式自行搜索引擎
@Pointcut("execution(* demo.springboot.aop.ctrl.*.*(..))")
public void pointcut() {}

@Before("pointcut()")
public void printParam(JoinPoint joinPoint){
//获取请求的方法
Signature sig = joinPoint.getSignature();
String method = joinPoint.getTarget().getClass().getName() + "." + sig.getName();

//获取请求的参数
Object[] args = joinPoint.getArgs();
//fastjson转换
String params = JSONObject.toJSONString(args);

//打印请求参数
log.info(method + ":" + params);
}
}
复制代码
  • 测试
    浏览器访问http://localhost:8080/getInfo?name=hello&age=18
    控制台日志:
    2019-05-11 21:28:23.526 INFO 44940 --- [nio-8080-exec-9] demo.springboot.aop.aspect.LogAspect : demo.springboot.aop.ctrl.TestController.getInfo:["hello",18]

3.对特定注解的方法进行aop操作

  • 创建注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Print {
String value() default "";
}
复制代码
  • 创建测试controller
//使用注解
@Print(value = "printParamAndResult")
@GetMapping("getString")
public String getString(String src){
return src;
}
复制代码
  • 创建打印请求参数、返回结果的Aspect
@Aspect
@Component
//lombok日志
@Slf4j
public class LogAspect {

@Pointcut("@annotation(print)")
public void annotationPointcut(Print print){}

@Around("annotationPointcut(print)")
public Object around(ProceedingJoinPoint pjp, Print print) throws Throwable {
//获取请求方法
Signature sig = pjp.getSignature();
String method = pjp.getTarget().getClass().getName() + "." + sig.getName();

//获取请求的参数
Object[] args = pjp.getArgs();
//fastjson转换
String params = JSONObject.toJSONString(args);

//打印请求参数
log.info("参数:" + method + ":" + params);

//执行方法
Object result = pjp.proceed();

//打印返回结果
log.info("返回结果:" + method + ":" + result);
return result;
}
}
复制代码
  • 测试
    浏览器访问http://localhost:8080/getString?src=hello
    控制台日志:
    2019-05-11 21:36:28.291 INFO 44940 --- [nio-8080-exec-3] demo.springboot.aop.aspect.LogAspect : 参数:demo.springboot.aop.ctrl.TestController.getString:["hello"]
    2019-05-11 21:36:28.291 INFO 44940 --- [nio-8080-exec-3] demo.springboot.aop.aspect.LogAspect : 返回结果:demo.springboot.aop.ctrl.TestController.getString:hello

项目路径


作者博客

作者公众号 在这里插入图片描述

分类:
后端
标签: