aop详细介绍自行搜索引擎,本文仅介绍使用
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 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]
- 对特定注解的方法进行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
作者公众号