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
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
AOP注解记录用户操作日志数据库
lie_123的博客
10-12 507
@Entity @Data public class SysOperateLog implements Serializable { private String id; private String module; private String type; private String ip; private String content; ...
2014-09-18-AOP_LOG4J
09-18
写这个日志的框架的主要想法是,先前在开发的时候logger都是到处都有不便于管理,于是想到了利用AOP加注解的方式统一管理,异常主要分为业务异常和系统异常, 业务异常应该由程序员在写业务的时候在可能发生业务异常的时候抛出,系统异常就是系统运行时除了业务异常其余都是系统异常,业务异常处理有3种操作,保存数据库保存在文件,或者都保存,系统异常也一样
spring aop生成日志文件
09-27
利用自定义注解和spring aopjava反射机制生成用户能够读懂的日志记录。如:用户张三在2013年9月27日17:00执行了用户管理模块的用户删除功能参数为(编号:123456)各位可根据需要写入数据库或者保存到文件。
springboot-aop-annotation-redis-demo:源码主要用于学习SpringBoot + AOP + Redis控制Redis自动缓存和删除,通过AOP切面+基于自定义注释解,实现缓存查询,清除操作,缓存层使用RedisTemplate,重新自带的RedisTemplate实现分库存存,查询,数据库使用MySQL 8.0.16,持久层使用Spring Data JPA,前端调用Swagger-UI 2.9.2提供API可视化调试操作
03-23
springboot-aop-annotation-redis-demo:源码主要用于学习SpringBoot + AOP + Redis控制Redis自动缓存和删除,通过AOP切面+基于自定义注释解,实现缓存查询,清除操作,缓存层使用RedisTemplate,重新自带的RedisTemplate实现分库存存,查询,数据库使用MySQL 8.0.16,持久层使用Spring Data JPA,前端调用Swagger-UI 2.9.2提供API可视化调试操作
springaop方式,审计记录用户操作步骤服务,mysql数据库
03-01
springaop方式,审计记录用户操作步骤服务,mysql数据库
使用AOP实现自定义日志
qq_51365907的博客
01-04 865
使用AOP实现自定义日志开发
spring aop 自定义注解保存操作日志mysql数据库 源码
11-25
一、适合人群 1、具备一定Java编程基础,初级开发者 2、对springboot,mybatis,mysql有基本认识 3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用
利用AOP记录操作日志保存数据库表里面
weixin_45955617的博客
05-25 1216
有了一个数据库表以后,我们需要创建对应的Mapper文件(这里使用的是注解insert),放到Mapper层即可。操作日志包括:操作人、操作时间、执行方法得全类名、执行方法名、方法运行时的参数、返回值、方法执行时长。主要使用环绕通知@Around,以及@Annotation。这里使用到了工具类JwtUtils:也就是1.1。
AOP操作日志记录(将增、删、改相关接口的操作日志记录到数据库表中)
weixin_46665411的博客
07-23 650
可以把这部分记录操作日志的通用的、重复性的逻辑代码抽取出来定义在一个通知方法当中,我们通过AOP面向切面编程的方式,在不改动原始功能的基础上来对原始的功能进行增强。所记录的日志信息包括当前接口的操作人是谁操作的,什么时间点操作的,以及访问的是哪个类当中的哪个方法,在访问这个方法的时候传入进来的参数是什么,访问这个方法最终拿到的返回值是什么,以及整个接口方法的运行时长是多长时间。所记录的操作日志当中包括:操作人、操作时间,访问的是哪个类、哪个方法、方法运行时参数、方法的返回值、方法的运行时长。
Spring Boot AOP 记录系统操作日志和异常日志数据库
技术老鸟
07-10 1257
spring boot AOP 记录系统操作日志和异常日志数据库
logback保存日志数据库主要代码.zip
07-22
springboot项目,使用logback保存日志数据库,非自增主键id,insert使用的是UUID
基于Struts2+Hibernate+Spring框架的超市信息管理系统
09-28
项目作品名称: 基于Struts2+Hibernate+Spring框架的超市信息管理系统 使用JQuery datatable插件浏览从数据库查询的信息记录...用Spring AOP技术,实现对添加或修改数据库记录操作的日志功能,日志记录保存数据库
AOP日志输出,根据已有的各种方法进行AOP日志输出
weixin_53595628的博客
11-17 320
AOP日志输出
AOP实现日志和异常处理
醉笑陪公三万场
05-19 6561
处理日志和异常的手段有很多,可以用拦截器、可以用struts2自带的异常处理机制。。。,还有一种就是springaop。         当n个项目,分别用springmvc、struts2开发时,想要统一处理异常,并记录日志,貌似只能用aop实现。 遇到异常就向外抛,是个很好的习惯,同时也个很不好的习惯,如果用了aop处理异常,就可以随意向上抛, 每个方法都用try-catch捕获异常,这
Springboot通过AOP和Async实现异步日志入库
Meta39的博客
10-27 2721
Springboot通过AOP和Async实现异步日志入库
SpringBoot】采用SpringAop实现接口请求日志记录到数据库
℡華ゞ
05-27 1193
在pom文件中引入aop相关包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 在数据库中创建日志表,用来记录数据 CREATE TABLE `log_no
springboot AOP拦截用户操作,并将操作信息存入数据库
javahaoge的博客
07-14 545
Spring Boot AOP可以用来拦截Controller中的方法,实现对请求的统一处理。通过定义切面和切点,可以在请求前、后、异常等不同的阶段进行处理,比如记录日志、权限校验、参数校验等。在Spring Boot中,可以使用@Aspect注解定义切面,使用@Pointcut注解定义切点,使用@Before、@After、@Around等注解定义不同类型的通知。同时,还可以使用@Order注解指定切面的执行顺序。
Springboot中 AOP实现日志信息的记录到数据库
qq_21305943的专栏
07-24 561
*** 自定义注解类*/@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行@Documented //生成文档。
MySQL精通之路】SQL优化(1)-查询优化(1)-WHERE子句
最新发布
Anakki的博客
05-22 503
与PRIMARY KEY或UNIQUE索引上的WHERE子句一起使用的表,其中所有索引部分都与常量表达式进行比较,并定义为NOT NULL。由于MySQL会自动进行类似的优化,因此您通常可以避免这项工作,并将查询保留为更易于理解和维护的形式。因为MySQL优化器的开发工作还在进行中,所以这里并没有记录MySQL优化器所有的优化。您可能会试图重写查询以加快算术运算,同时牺牲可读性。,这有助于简化join连接。有关更多信息和示例,请参见“有关更多信息,请参见“空表或只有一行的表。
使用Java中的aop思想 完成操作日志的insert到数据库
02-01
使用Java中的aop思想完成操作日志的insert到数据库,需要在编写两部分代码: 1. 定义切面:在切面中,我们定义了哪些方法是需要被拦截的,以及在方法执行前后需要执行的逻辑。 2. 定义通知:在通知中,我们定义了在切面的方法执行前后要执行的具体操作。 下面是一个简单的例子,展示了如何使用aop完成操作日志的insert到数据库: ``` @Aspect @Component public class LogAspect { @Pointcut("@annotation(com.example.aop.Log)") public void logPointCut() {} @Before("logPointCut()") public void saveLog(JoinPoint joinPoint) { // 获取方法的参数 Object[] args = joinPoint.getArgs(); // 获取方法的名称 String methodName = joinPoint.getSignature().getName(); // 创建日志对象 Log log = new Log(); log.setMethod(methodName); log.setArgs(args); // 保存日志数据库 logDao.insert(log); } } ``` 在上面的代码中,我们定义了一个切面`LogAspect`,在该切面中定义了一个切点`logPointCut`,使用了`@Pointcut`注解来声明。然后我们使用了`@Before`注解来声明一个前置通知,在方法执行之前会执行这个通知中的代码。在通知中,我们获取了方法的参数和方法名称,然后创建了一个日志对象,将这些信

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • JDBC的三层分层架构 3057
  • Aop实现日志并保存数据库 2370
  • 占位符的使用 1498
  • JDBC基本语句 833
  • Java 递归三级类别 380

最新评论

  • SpringCloudAlibaba集成Mybatis 报maven-compiler-plugin:3.11.0:compile

    CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • Aop实现日志并保存数据库

    zsy996: 需要环绕通知的catch捕捉异常,或者异常通知,将异常信息设置到domain对象的字段属性里,再保存到数据库。后置通知没办法

  • Aop实现日志并保存数据库

    吃香蕉的大熊: 不会出现你想的这种事情发生,因为方法是用的后置增强是走完方法日志才进数据库的。如果出现你描述的这种情况的话很有可能是你在方法中没有做数据校验导致的

  • Aop实现日志并保存数据库

    那年季花落乱了流年: 如果日志报错了,会添加嘛

  • JDBC的三层分层架构

    O不会飞的猪: 清晰明了,好评

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Java数据加密
  • 上传图片到阿里云服务器(获取后台服务端签名后直传数据到OSS)
  • SpringColud结合Redis(简单版)
2024年6篇
2021年1篇
2020年23篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司贺州网站优化推广报价西乡企业网站设计推荐莆田网站推广系统报价十堰推广网站价格成都企业网站制作价格恩施外贸网站制作多少钱台州外贸网站制作报价抚州百度爱采购哪家好钦州网站优化公司布吉网站优化推广哪家好防城港建网站报价娄底SEO按天收费哪家好平凉设计网站湛江建设网站报价宜春模板网站建设清徐关键词排名达州网站建设设计多少钱林芝外贸网站制作推荐思茅百姓网标王报价巢湖优化哪家好龙岗网站开发推荐信阳SEO按效果付费公司邢台网站推广方案推荐阳泉品牌网站设计报价辽源模板推广多少钱松岗SEO按效果付费报价南平阿里店铺运营推荐长葛网站搭建报价珠海关键词排名价格商洛百姓网标王多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化