自定义注解!绝对是程序员装X的利器( 五 )


特别需要注意的是 , 这里之所以可以返回一个固定的BaseResponse , 是因为我们会要求我们的所有对外提供的接口的response必须继承BaseResponse类 , 这个类里面会定义一些默认的参数 , 如错误码等 。
之后 , 只需要对需要参数校验的方法增加对应注解即可:
@Facadepublic TestResponse query(User user) {}这样 , 有了以上注解和切面 , 我们就可以对所有的对外方法做统一的控制了 。
其实 , 以上这个facadeAspect我省略了很多东西 , 我们真正使用的那个切面 , 不仅仅做了参数检查 , 还可以做很多其他事情 。比如异常的统一处理、错误码的统一转换、记录方法执行时长、记录方法的入参出参等等 。
总之 , 使用切面+自定义注解 , 我们可以统一做很多事情 。除了以上的这几个场景 , 我们还有很多相似的用法 , 比如:
统一的缓存处理 。如某些操作需要在操作前查缓存、操作后更新缓存 。这种就可以通过自定义注解+切面的方式统一处理 。
代码其实都差不多 , 思路也比较简单 , 就是通过自定义注解来标注需要被切面处理的累或者方法 , 然后在切面中对方法的执行过程进行干预 , 比如在执行前或者执行后做一些特殊的操作 。
使用这种方式可以大大减少重复代码 , 大大提升代码的优雅性 , 方便我们使用 。
但是同时也不能过度使用 , 因为注解看似简单 , 但是其实内部有很多逻辑是容易被忽略的 。就像我之前写过一篇《Spring官方都推荐使用的@Transactional事务 , 为啥我不建议使用!》中提到的观点一样 , 无脑的使用切面和注解 , 可能会引入一些不必要的问题 。
不管怎么说 , 自定义注解确实是一个很好的发明 , 可以减少很多重复代码 。快快在你的项目中用起来吧 。

【自定义注解!绝对是程序员装X的利器】


推荐阅读