以日志实体类和dao,service方法准备好为前提
引入依赖
<!--spring切面aop依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
新建annotation类
@Target({METHOD, TYPE})//作用在参数和方法上
@Retention(RetentionPolicy.RUNTIME)//运行时注解
@Inherited
@Documented//表明这个注解应该被 javadoc工具记录
public @interface Operation {
String value() default "";
}
新建LogAspect切面类
import cn.hutool.system.SystemUtil;
import com.springboot.demo.entity.SysLog;
import com.springboot.demo.service.ISysLogService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.lang.reflect.Method;
/**
* Create By SINYA
* Description:
*/
@Aspect
@Component
public class SysAspect {
@Resource
private ISysLogService sysLogService;
//定义切点 @Pointcut
//在注解的位置切入代码
@Pointcut("@annotation(com.springboot.demo.core.interceptor.aop.Operation)")
public void logPointCut(){
}
@AfterReturning(value="logPointCut()",returning="returnValue")//returning表示这个方法返回的值
public void saveSysLog(JoinPoint joinPoint,Object returnValue) {
//保存日志
SysLog sysLog = new SysLog();
//从切面织入点处通过反射机制获取织入点处的方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//获取切入点所在的方法
Method method = signature.getMethod();
//获取操作
Operation operation = method.getAnnotation(Operation.class);
if (operation != null) {
String value = operation.value();
sysLog.setRequestDesc(value);//保存获取的操作
}
//获取请求的类名
String className = joinPoint.getTarget().getClass().getName();
//获取请求的方法名
String methodName = method.getName();
//注入Syslog对象
//username应从session里取出
sysLog.setUserName("Sinya");
//IP地址获取工具为HUtooljar包,自行添加依赖
sysLog.setUserIp(SystemUtil.getHostInfo().getAddress());
sysLog.setRequestMethod(className + "." + methodName);
//调用service保存SysLog实体类到数据库
sysLogService.saveLog(sysLog);
}
}
如果日志需要参数里,和返回结果的一些数据,那么可以通过下面的方法获取请求参数,以及使用上面的retuning变量来获取日志想要的值来给日志对象增加属性
20191125-135831.jpg给想要增强的方法添加注解即可
20191125-140228.jpg
网友评论