1、引入AOP依赖
<!--aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
2、自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String operation() default "";
}
3、aop文件
@Aspect
@Component
public class LogAspectAop {
/**
* 定义@Before增强,拦截带有@Log注解的方法,并记录操作日志
*/
@Before("@annotation(com.example.demo.log.Log)")
public void before(JoinPoint joinPoint){
// 获取目标方法名
String methodName = joinPoint.getSignature().getName();
// 获取目标方法参数
Object[] args = joinPoint.getArgs();
// 获取Log注解信息
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Log log = method.getAnnotation(Log.class);
// 记录操作日志,插入数据库,根据自己业务需求编写,我这里只是简单示范
OperateLog operateLog = OperateLog.builder().operateUser("hzs").operateName(log.operation()).methodName(methodName).params(Arrays.toString(args)).createTime(new Date()).build();
operateLogService.save(operateLog);
}
@Resource
private OperateLogService operateLogService;
}
4、随便写一个测试controller文件
@RestController
@RequestMapping("test")
public class testController {
@Log(operation = "获取数据")
@GetMapping(value = "hello/{id}")
public String get(@PathVariable("id") Long id){
return "ok";
}
}
5、OperateLog 类,对应数据库表,这里一般还会有ip地址等其他重要字段,我这里只是简单示范
@Data
@Builder
@TableName("tb_operate_log")
public class OperateLog {
//主键
@TableId(type = IdType.AUTO)
private Long id;
//操作员
private String operateUser;
//操作接口注释名
private String operateName;
//方法名
private String methodName;
//参数
private String params;
//操作时间
private Date createTime;
}
5、IOperateLogService 文件
public interface IOperateLogService extends IService<OperateLog> {
}
6、OperateLogServiceImpl 文件
@Service
public class OperateLogServiceImpl extends ServiceImpl<OperateLogMapper, OperateLog> implements IOperateLogService{
}
7、mapper文件
@Mapper
public interface OperateLogMapper extends BaseMapper<OperateLog> {
}