用aop写一个操作日志
时间: 2023-07-01 15:07:19 浏览: 93
首先,需要定义一个注解来标识需要记录操作日志的方法:
```java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
String value() default "";
}
```
然后,定义一个切面类来实现记录操作日志的功能:
```java
@Aspect
@Component
public class LoggingAspect {
@Autowired
private LogService logService;
@Around("@annotation(loggable)")
public Object logMethodExecution(ProceedingJoinPoint joinPoint, Loggable loggable) throws Throwable {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
String message = loggable.value().isEmpty() ? methodName : loggable.value();
Object[] args = joinPoint.getArgs();
String argString = Arrays.toString(args);
Object result = null;
try {
result = joinPoint.proceed();
logService.log(className, methodName, message, argString, result.toString(), LogType.INFO);
} catch (Exception e) {
logService.log(className, methodName, message, argString, e.getMessage(), LogType.ERROR);
throw e;
}
return result;
}
}
```
在切面类中,我们使用@Around注解来标识切面类型为Around,同时使用@annotation(loggable)来指定需要拦截的方法必须被@Loggable注解修饰。在切面方法中,我们可以获取到目标方法的类名、方法名、参数列表以及返回值,并把这些信息记录到数据库中。
最后,我们需要定义一个LogService类来实现将操作日志记录到数据库的功能。具体实现可以根据项目的具体情况而定。
阅读全文