springboot AOP

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

  1. 引入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 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]
  1. 对特定注解的方法进行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

项目路径


作者博客

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值