前言:
最近在工作中犯了经验主义的错误,由于之前是写c++,Java底层逻辑与c++不一样,引发了生产的问题,写篇博客记录一下这次错误。经历这次错误后也需要开始思考,会导致这种错误产生的根本原因是什么,是否在解决工作中的问题的时候不仅考虑实现需求,同时也要系统性的考虑别的问题,如内存的消耗,程序抛出错误,算法效率问题,环境配置问题,maven兼容问题等问题。
之后除了用心学习,同时也需要定时定期的对代码进行反思,
正文:
Java底层架构理解问题
在实现对日志进行脱敏的需求的时候,由于Java中给函数传入对象时,名为值传递,实则在操作对象的方面只会复制一个对象的内存地址。函数实际是通过内存地址寻址然后操作原对象,从而引发了这次问题。
Aop代码逻辑问题
另一方面在使用aop操作时,需要使用
joinPoint.proceed();
才会操作原ServletRequestAttributes的请求对象进行修改,这次也是忽视了在写日志的customLogDetails的Result的时候调用了这个方法,导致原本的需要脱敏的请求内容被修改。根本原因还是复制代码的时候逻辑没有理清,导致忽视了浅显的问题。
开发时写的测试用例和开发后与测试进行沟通的问题
在修改接口时虽然寻找了aop低侵入的方法,但还是影响了代码和内存逻辑,然而在开发的时候没有考虑到这一层。这个问题也是出在自己的测试接口不全面,后期和测试沟通的时候也没有想到这一块。
之后在写完代码之后应该优先考虑测试接口的全部流程,这个接口的修改会不会影响到其他的业务,然后再关闭任务提交验收。