运用Spring Aop,一个注解实现日志记录 (2)

编写一个简单的请求,请求需要一个User对象的请求体,返回一个Map结果。

@RestController @Slf4j public class Controller { @PostMapping("/test") @MyLog public Map<String, Object> testAop(@RequestBody User user){ Map<String,Object> map = new HashMap<>(); map.put("code",200); map.put("errorMsg","success"); return map; } } 2.4 运行结果

使用IDEA自带的Http Client来测试api

image-20220129002512748

结果:

image-20220129002550745

可以看到通过利用AOP,我们没有修改Controller中的代码,就可以实现对Controller中每个方法请求信息的日志记录功能。

而且我们还能够指定该切面类是在生产环境还是开发环境下生效,只需要在切面类上添加注解。

@Profile({"dev"})

然后在配置文件中定义 spring.profiles.active 的属性即可。

3. 总结

因为学习了Spring后,虽然知道有AOP这个东西,但是却从来没有真正的在实际项目中运用,这几天研究日志记录,却发现AOP在日志记录中的妙用,甚至可以利用AOP在对代码无侵入的情况下,进行参数数据的加密和解密操作。但是,虽然说AOP使用方便,但是不能够滥用,毕竟AOP底层使用动态代理,而动态代理要做到对方法的修改就肯定要使用到反射,反射会对性能有影响。

4. 参考文章

(7 封私信 / 66 条消息) 在一个完整的项目中,会用AOP技术么,能用简单易懂的方式说明下什么是AOP么? - 知乎 (zhihu.com)

【SpringBoot】AOP应用实例_sysu_lluozh-CSDN博客

(20条消息) Springboot Aop 自定义注解、切面_张同学的博客-CSDN博客_springboot 自定义注解切面

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsfps.html