springboot整合AOP自定义注解

一创建一个自定义注解

//    String value() default "";
}

二 创建一个切面类

@Component
public class MyAspect {
    @Autowired
    private LogsService logsService;
//搜索UsersService类中的所有带@MyLog的方法
    @Pointcut("execution(* com.qianfeng.wc.service.UsersService.*(..))&&@annotation(com.qianfeng.wc.aop.MyLog)")
    public void gub() {
    }

    @After("gub()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        Logs logs = new Logs();
// 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest req = attributes.getRequest();

        String[] split = req.getRequestURL().toString().split("/");

        logs.setUserip(req.getRemoteAddr());// 获取请求的ip地址
        logs.setRequrl(req.getRequestURL().toString());// 获取请求的url

        String methodame = joinPoint.getSignature().getName();// 获取类方法
        if (methodame.contains("select")) {
            logs.setActiondetail(split[3].concat("_查询"));
        } else if (methodame.contains("insert")) {
            logs.setActiondetail(split[3].concat("_添加"));
        } else if (methodame.contains("update")){
            logs.setActiondetail(split[3].concat("_修改"));
        } else if (methodame.contains("delete")) {
            logs.setActiondetail(split[3].concat("_删除"));
        } else {
            logs.setActiondetail("未知操作");
        }

        logs.setClassname(joinPoint.getSignature().getDeclaringTypeName());// 获取类名
        logs.setMethodame(methodame);

        Object[] args = joinPoint.getArgs(); // 获取请求参数
            if (args[0].toString()!=null){
                logs.setOperationdata(args[0].toString());
            }else{
                logs.setOperationdata("无");
            }


        logs.setUpdatetime(new Timestamp(System.currentTimeMillis()));
//        logs.setRemarks();
        req.setAttribute("logs",logs);
        try {
            logsService.insert(logs);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

三 在实现类中需要的方法上加上@MyLog注解

@MyLog
public int deleteById(Integer id) {

    return this.usersDao.deleteById(id);
}
     params.put("url", req.getRequestURL().toString()); // 获取请求的url
        params.put("method", req.getMethod()); // 获取请求的方式
        params.put("ip", req.getRemoteAddr()); // 获取请求的ip地址
        params.put("className", joinPoint.getSignature().getDeclaringTypeName()); // 获取类名
        params.put("classMethod", joinPoint.getSignature().getName()); // 获取类方法
        params.put("args", joinPoint.getArgs().toString()); // 请求参数

你可能感兴趣的:(springboot整合AOP自定义注解)