# 利用AOP实现操作日志 AOP能够实现一些前置或者后置任务,作为一个切面,来完成例如日志记录、性能统计、安全控制、事务处理、异常处理等任务。...这篇文章主要是总结自己利用AOP去实现全局操作日志记录功能的步骤。...要完成日志功能的记录和查询首先需要一个数据库表,命名为sysLog 包含id、visitTime、username、ip、url、executionTime、method字段 分别代表主键、访问时间、操作者用户名...String ip; private String url; private Long executionTime; private String method; } 创建AOP...结束时间可以直接用new Date().getTime()减去开始时间,即可获得访问时长了 我们还想要获取Controller中执行注解的url,有一下几个步骤: 当访问的类、访问的方法不为空且当前的类不是AOP
为了让记录日志更加灵活,我们将使用自定义的注解来实现重要操作的日志记录 一 日志记录表 日志记录表主要包含几个字段,业务模块,操作类型,接口地址,处理状态,错误信息以及操作时间。...*/ private Date operTime; } 二 自定义注解及处理 自定义注解包含两个属性,一个是业务模块title,另一个是操作类型businessType。...default ""; /** * 功能 */ BusinessType businessType() default BusinessType.OTHER; } 使用aop...private AsyncLogService asyncLogService; // 配置织入点 @Pointcut("@annotation(com.javatrip.aop.annotation.Log...,为了方便我直接使用jdbcTemplate在service中进行存库操作。
bean> 3、在 spring 配置文件中配置切入点
使用SpringBoot AOP 记录操作日志、异常日志 我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能。...Spring AOP 的主要功能就是将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来。...今天我们就来用springBoot Aop 来做日志记录 一、表结构 使用的数据库为 PostgreSql,不同数据库SQL存在差异,自行修改即可。...dependency> org.springframework.boot spring-boot-starter-aop...} 3、切面类记录操作日志 LogAspect.java package com.demo.utils.aop; import com.alibaba.fastjson.JSON; import
本章将整合AOP,实现请求接口后,对日志进行处理,不直接写到逻辑里面,尽量解耦,采用切面方式。...IdType.UUID) private String id;//id @TableField("operationUser") private String operationUser;//操作人...parameter") private String parameter;//方法入参 @TableField("title") private String title;//操作方法...sysType") private Integer sysType;//系统类型 @TableField("opType") private Integer opType;//操作类型...此处从session里面获取当前用户,表示日志的操作人(在登录时将用户名存入session),实际使用也可以采用其他办法。
实现方案对比 基于AOP(切面)传统的实现方案 优点:实现思路简单; 缺点:增加数据库的负担,强依赖前端的传参,不方便拓展,不支持批量操作,不支持多表关联; 基于数据库Binlog 优点:解除了数据新旧变化的耦合...,支持批量操作,方便多表关联拓展,不依赖开发语言; 缺点:数据库表设计需要统一的约定; 方案实现细节 一、基于AOP切面+注解的传统方案 传统的做法就是切面+注解的方式,这种对代码的侵入性不强,通常记录...ip、业务模块、操作账号、操作场景、操作来源等等,一般在注解+拦截器里这些值都拿得到,如下图所示: ?...,并且都已经在功能上进行实现,其中使用aop方案也是大部分中小企业的首选实现方案,但是在一些金融领域以及erp相关系统,对操作日志记录明细要求极高,常见技术方案很难满足,即使能够满足也会带来一些代码强侵入以及性能问题...,所以我们又讨论了基于binlog实现的方案,该方案虽然比对aop来说增强了技术的复杂性,但是对于有一定技术积累的团队来说不算什么难事,并且该方案我们都实现了上线,并且解决了代码层面上的侵入,属于跨语言级别的
五、在Controller层方法添加@OperLog注解 六、操作日志、异常日志查询功能 ---- 平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能;我们在操作某些功能时也有可能会发生异常...我们以前学过Spring 三大特性,IOC(控制反转),DI(依赖注入),AOP(面向切面),那其中AOP的主要功能就是将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来。...今天我们就来用springBoot Aop 来做日志记录,好了,废话说了一大堆还是上货吧。 一、创建日志记录表、异常日志表,表结构如下: ? ?...dependency> 2 org.springframework.boot 3 spring-boot-starter-aop...创建切面类记录操作日志 1 package com.hyd.zcar.cms.common.utils.aop; 2 3 import java.lang.reflect.Method;
在spring中的AOP是一个重要的部分,但是在工作中需要去自定义一个切面和切面的时候并不多(至少本人是这样的),以至于以前学的一些东西到现在都已经记不清了,所以现在来做一下记录。...需求:在系统中我们要加入按钮级别的操作日志,实际上就是借口级别的操作日志,记录的信息为:xx调用了xx接口。...org.springframework.boot spring-boot-starter-aop... 2.编写切点和切面 package com.youyou.address.aop; import io.swagger.annotations.Api...import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * 添加操作日志
我们以前学过Spring 三大特性,IOC(控制反转),DI(依赖注入),AOP(面向切面),那其中AOP的主要功能就是将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来。...今天我们就来用springBoot Aop 来做日志记录,好了,废话说了一大堆还是上货吧。 一、创建日志记录表、异常日志表,表结构如下: 操作日志表 ? 异常日志表 ?...依赖 org.springframework.boot spring-boot-starter-aop...package com.hyd.zcar.cms.common.utils.aop; import java.lang.reflect.Method; import java.util.Date;...六、操作日志、异常日志查询功能 ? ? ? ? ? 原文始发于微信公众号(全栈程序员社区):如何使用SpringBoot AOP 记录操作日志、异常日志?
操作日志对于程序员或管理员而言,可以快速定位到系统中相关的操作,而对于操作日志的管理的实现不能对正常业务实现进行影响,否则即不满足单一原则,也会导致后续代码维护困难,因此我们考虑使用AOP切面技术来实现对日志管理的实现...文章大致内容: 1、基本概念 2、基本应用 3、日志管理实战 对这几部分理解了,会对AOP的应用应该很轻松。...Spring AOP允许您向任何建议的对象引入新的接口(和相应的实现)。...由于Spring AOP是通过使用运行时代理实现的,所以这个对象始终是代理对象 AOP proxy(代理) AOP框架为实现切面契约(通知方法执行等)而创建的对象。...-- aop依赖 --> org.springframework.boot spring-boot-starter-aop
介绍SpringBoot快速启动测试AOP,巧妙打印日志信息。...4、AOP应用场景 记录日志 监控性能 权限控制 事务管理 快速开始 引入依赖 如果你使用的是SpringBoot,那么只需要引入:spring-boot-starter-aop,框架已经将spring-aop...class WebLog implements Serializable { private static final long serialVersionUID = 1L; // 操作描述...private String description; // 操作时间 private Long startTime; // 消耗时间 private Integer...ipAddress; // 请求参数 private Object params; // 请求返回的结果 private Object result; // 操作类型
但是在实际开发中,使用文件存储日志用来快速查询问题并不是最方便的,一个优秀系统除了日志文件还需要将操作日志进行持久化,来监控平台的操作记录。今天我们一起来学习一下如何通过apo来记录日志。...为了让记录日志更加灵活,我们将使用自定义的注解来实现重要操作的日志记录功能。 一 日志记录表 日志记录表主要包含几个字段,业务模块,操作类型,接口地址,处理状态,错误信息以及操作时间。...default ""; /** * 功能 */ BusinessType businessType() default BusinessType.OTHER; } 使用aop...private AsyncLogService asyncLogService; // 配置织入点 @Pointcut("@annotation(com.javatrip.aop.annotation.Log...,为了方便我直接使用jdbcTemplate在service中进行存库操作。
org.springframework.boot spring-boot-starter-aop
在Spring框架中,使用AOP配合自定义注解可以方便的实现用户操作的监控。 先引入依赖 org.springframework.boot spring-boot-starter-aop...image.png Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/springboot学习-springbootaop记录用户操作日志
一、对AOP的初印象 首先先给出一段比较专业的术语(来自百度): 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术...二、AOP中的相关概念 看过了上面的例子,我想大家脑中对AOP已经有了一个大致的雏形,但是又对上面提到的切面之类的术语有一些模糊的地方,接下来就来讲解一下AOP中的相关概念,了解了AOP中的概念,才能真正的掌握...AOP的精髓。...Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码...的概念还是很模糊, 对 AOP 中的各种概念理解的还不是很透彻.
文章目录 地址 版本 源码解析-AOP+自定义注解实现操作日志记录 地址 Gitee: https://gitee.com/dromara/Jpom 官网: https://jpom.io/ 一款简而轻的低侵入式在线构建...---- 版本 我们以2.8.12为例子,鉴赏学习一下 ---- 源码解析-AOP+自定义注解实现操作日志记录
AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。...所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。...AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。...CGLIB AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分: 1、定义普通业务组件 2、定义切入点,一个切入点可能横切多个业务组件 3、定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作...所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,即:代理对象的方法=增强处理+被代理对象的方法。
AOP详解之三-创建AOP代理后记,创建AOP代理。 上篇文章已经获取到了AOP的信息,接下来就是拿着这些AOP的信息去创建代理了。 首先我们看下创建AOP代理的入口处。...则代表无需处理 if (Boolean.FALSE.equals(this.advisedBeans.get(cacheKey))) { return bean; } // 3.bean的类是aop...的代理对象 /** * 创建AOP对象的真正实例 * @param config the AOP configuration in the form of an * AdvisedSupport...[image-20220324091153589] 我们实现类也就是我们常说的实现AOP的两种方式,使用cglib和jdk动态代理的方式。 我们简要的介绍一下这两种aop的原理。...历时三个月将Spring的IOC和AOP的源码解读就结束了,如果读者想完整的熟悉整个流程,可以看历史文章一步步的揭开Spring的神秘面纱。
思路总结: 需要在日志记录的方法中添加一个自定义注解,再去实现一个日志AOP类,AOP类把自定义注解设置为切点,当系统执行某一个添加了自定义注解的方法时,AOP会自动获取该方法名称以及用户信息实现日志记录...-- aop依赖 --> org.springframework.boot spring-boot-starter-aop <!...创建库表 在数据库中创建一张sys_log表,用于保存用户的操作日志 -- ---------------------------- -- Table structure for sys_log...源 本文链接:https://www.findmyfun.cn/spring-boot-uses-aop-to-get-users-operation-and-realize-logging.html
文章目录 开头 aop:config 解析 proxy-target-class & expose-proxy aop:pointcut aop:advisor aop:aspect aop:declare-parents...-- 必须配置,因为被代理的对象必须在Spring容器中 --> <aop...aop:declare-parents 对于aop:declare-parents子标签,其决定的是代理子类应该实现哪些接口: <aop:declare-parents types-matching="...其类图: 其它 此处的其它指的是aop:before, aop:after等最核心的标签。... 里的aopAdvice。
领取专属 10元无门槛券
手把手带您无忧上云