在开发过程中,我们经常需要记录用户的操作日志,例如用户的登录、新增、修改、删除等操作。为了更加优雅地实现操作日志记录,我们可以借助Spring Boot的AOP和注解来实现。
首先,我们需要创建一个注解@Log
,用来声明哪些方法需要记录操作日志。可以在类级别或者方法级别使用该注解。例如:
java
@Log("新增用户") // 在方法上使用注解
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户逻辑
}
接下来,我们需要创建一个切面类LogAspect
,用来处理@Log
注解的逻辑。在切面类中,我们可以获取到方法的参数、返回值等信息,进而记录对应的操作日志。
java
@Aspect
@Component
public class LogAspect {
@Autowired
private LogService logService;
@Pointcut("@annotation(com.example.demo.annotation.Log)")
public void logPointCut() {
}
@AfterReturning(pointcut = "logPointCut()", returning = "returnValue")
public void afterReturning(JoinPoint joinPoint, Object returnValue) {
// 获取方法的参数、返回值等信息
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
// ...
// 记录操作日志
Log log = joinPoint.getMethod().getAnnotation(Log.class);
logService.saveLog(log.value(), methodName, args, returnValue);
}
}
在切面类中,我们使用@Pointcut
注解来声明@Log
注解的切入点,使用@AfterReturning
注解来处理方法执行完毕后的逻辑。在afterReturning
方法中,我们可以通过joinPoint
参数获取到方法的相关信息,并调用logService
来保存操作日志。
最后,我们需要定义一个LogService
来实现将操作日志保存到数据库或者其他日志存储方式。
java
@Service
public class LogService {
public void saveLog(String action, String methodName, Object[] args, Object returnValue) {
// 将操作日志保存到数据库或者其他日志存储方式
}
}
通过以上步骤,我们就可以实现通过AOP+注解优雅地实现操作日志记录了。在需要记录操作日志的方法上添加@Log
注解,就可以自动记录对应的操作日志了。