今日接到一个需求,是关于对项目的一个操作记录,想记录所有的增删改查,也就是所有的操作?想想该如何实现呢?首先肯定就想到了spring的AOP。那么如何能够更加页面化呢?如果对于项目中已经使用了swagger,那么利用起来就是一个很好的方式。最终效果图如下:
一、AOP及注解
1)何为AOP?
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
2)@Aspect
把当前类标识为一个切面供容器读取
3)@Around
环绕增强,相当于MethodInterceptor
二、swagger及注解
1)何为swagger?
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。详情之前文章
2)@ApiOperation
swagger api注解
@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;
还有其他的,详情可见官方文档
三、合并使用代码
使用swagger的主要目的就是中文可视化。就如上图似的。
/**
* @param joinPoint:
* @Author: TheBigBlue
* @Description: 环绕通知,拦截controller,输出请求参数、响应内容和响应时间
* @Date: 2019/6/17
* @Return:
**/
@Around(executeExpr)
public Object processLog(ProceedingJoinPoint joinPoint) throws Exception {
SysOperLog sysOperLog = new SysOperLog();
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
//获取方法名称
String methodName = method.getName();
//获取参数
Object[] argsInfo = joinPoint.getArgs();
if (method.isAnnotationPresent(ApiOperation.class)) {
//获取swagger上的方法说明信息
ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);
sysOperLog.setTitle(apiOperation.value());
...省略无数,其他可以直接通过aop获取
}
两者结合主要就是取值中文描述部分,其他的主要功能其实可以完全靠AOP就能完成,哈哈。
详细代码在此点击下载