Aop实现日志并保存数据库

借助Aop切面实现日志功能并保存数据库

使用Aop步骤如下:
1.增强方法

	 1. 日志信息获取
	 2. 日志信息添加至数据库

2.增强类型

	  后置增强
	ps: 我这里使用的后置增强,当然你也可以使用前置增强或者环绕增强

3.切入点

	  切注解
	ps:当然你也可以用来切方法

实现步骤:

  1. 定义日志实体类
  2. 定义dao方法
  3. 实现mapper.yml
  4. 定义service方法
  5. 实现service方法
  6. 实现controller接口

重头戏来了!

  1. 在自己的包里创建一个aop的包和annotation的包,在包里创建一个类如下↓
    ps:

    • aop包:用来写切面类
    • annotation:用来写在方法上的返回信息
      在这里插入图片描述
  2. 在自己切面类里写入切面注解,然后把mapper层方法注入进来以及要用到的方法如下↓
    @Aspect 作用是把当前类标识为一个切面供容器读取
    @Component 类交给Spring管理
    切面类需要写一个切入点 ,我这边切的就是刚刚写的那个annotation包下的那个类如下↓在这里插入图片描述
    ps:

  3. 这里说一下annotation类里写的是一些返回给数据库的信息,也就是要定义在serviceImpl类上面的如下↓定义默认值

  4. 接着就需要编写aop里的代码以及逻辑了 这里我写的注释还是比较清晰的 如下↓

public void CrudCommandAfter(JoinPoint joinPoint){//joinPoint获取目标方法的所有信息
		//导入hutool工具类jar包 cn.hutool.core.lang.ObjectId;
        String next = ObjectId.next();
        /**
         *1.获取日志信息
         */
        CrudCommand  crudCommand =new CrudCommand();
        //日志
        crudCommand.setCrudCommandIpcExpiredDate(new Date());
        //ip 通过工具类
        String byRequest = IPKit.getIpAddrByRequest(request);
        System.err.println(byRequest);
        //日志打印
        crudCommand.setCrudCommandIpcEndpoint(byRequest);

        //session用户名
        CrudCommand admin = (CrudCommand)request.getSession().getAttribute("admin");
        if(admin != null){
            crudCommand.setCrudCommandIpcId(admin.getCrudCommandIpcId());
        }else{
            crudCommand.setCrudCommandIpcId(next);
        }


        /**
         * 操作内容和接收格式'
         * 获取目标方法上的注解 连接点对象
         */

        //1.获取方法签名
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        //2.通过方法签名获取方法对象
        Method method = signature.getMethod();
        //3.通过方法对象  获取方法对象注解
        LogAnnotation annotation = method.getAnnotation(LogAnnotation.class);
        //获取值
        String type = annotation.type();
        crudCommand.setCrudCommandIpcAction(type);
        crudCommand.setCrudCommandIpcResponse(annotation.response());
        crudCommand.setCrudCommandIpcState(annotation.state());

        /**
         * 2.日志信息保存到数据库
         *   调用mapper添加方法
         */
       /* System.err.println("==================crudCommand"+crudCommand);*/
        commandMapper.append(crudCommand);
        /*System.err.println("测试后置增强。");*/

    }

5.接下来就需要往service加切面的注解了 以为我在annotation类里写了一些默认值 所以在service使用注解使也是可以不给某些参数赋值的 当然这个注解也是可以添加在Controller层的 但是不建议 如下↓注解
6.最终结果如下↓数据值

ps:我是用SpringBoot框架来做的。

衷心希望能帮到大家!

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值