RUNTIME) @Inherited @Documented public @interface LogRecordAnnotation { //操作是否成功 boolean succeed() default true; //操作人 String operator() default ""; //业务单号 String bizNo() default ""; //操作日志的种类 String category() default ""; //扩展参数,记录操作日志的修改详情 String detai...
操作记录,是通过DAO/Service操作来加入到RMDB的,这样会导致每个业务service都需要注入(或者parent),而且每个更新/新增等方法都需要手动的调用op的service来记录,感觉侵入性太强,耦合太高,而且结合进了整体事务中 采用spring AOP 结合SPEL的方式来抽象,最终通过注解的方式来实现日志记录 关于一些基础的参考:自定义注解结合...
II. AOP & SpEL 关于AOP 与 SpEL 的知识点,之前都有过专门的介绍,这里做一个聚合,一个非常简单的日志输出切面,在需要打印日志的方法上,添加注解@Log,这个注解中定义一个key,作为日志输出的标记;key 支持 SpEL 表达式 1. AOP 切面 注解定义 @Target(ElementType.METHOD) @Re...
那么_如果我们想要在日志内容中添加更多的业务上下文信息,如:XXX 修改了项目ID=001的数据,XXX删除了产品ID=002的数据,这时候就可以通过使用 AOP + SpEL 表达式来实现。 1、SpEL表达式 首先简单介绍下SpEL,并是不很复杂的一种新技术,我们在日常的开发中其实大家都隐形的在使用SpEL。 官方的定义:SpEL(Spring Express...
审计⽇记就是记录⽤户的操作记录 基于AOP动态代理实现⾃定义审计⽇志注解, 并⽀持Spel表达式解析 2-实现 2-1 ⽇志存储实体类 @Data @Builder @ToString public class AuditingLog { private String userId; // ⽤户id private String userNickname; //⽤户昵称 private String operationInfo; //...
审计日记就是记录用户的操作记录 基于AOP动态代理 实现自定义审计日志注解, 并支持Spel表达式解析 2-实现 2-1 日志存储实体类 @Data @Builder @ToStringpublicclassAuditingLog {privateString userId;//用户idprivateString userNickname;//用户昵称privateString operationInfo;//操作信息privateString interfaceName;//...
【SpringBoot 基础系列】AOP结合SpEL实现日志输出的注意事项一二 使用AOP 来打印日志大家一把都很熟悉了,最近在使用的过程中,发现了几个有意思的问题,一个是 SpEL 的解析,一个是参数的 JSON 格式输出 I. 项目环境 1. 项目依赖 本项目借助SpringBoot 2.2.1.RELEASE+maven 3.5.3+IDEA进行开发 ...
使用AOP 来打印日志大家一把都很熟悉了,最近在使用的过程中,发现了几个有意思的问题,一个是 SpEL 的解析,一个是参数的 JSON 格式输出 I. 项目环境 1. 项目依赖 本项目借助SpringBoot 2.2.1.RELEASE+maven 3.5.3+IDEA进行开发 开一个 web 服务用于测试 ...
@Query:查询操作@Modifying:修改操作@PathVariable:将URL中的请求参数绑定到控制器的入参上@Override:重写@Param:声明属性 语句说明: 1、使用SpEL表达式 @Query("select u from User u where u.idCard = ?1") User findByIdCard3(String idCard); 1. 2. 2、使用原生SQL(需添加nativeQuery=true) @Query(...
AOP: 面向切面编程?NO, 我们低端点, 它就是一个非常厉害的装饰器, 可以和业务逻辑平行运行, 适合处理一些日志记录/权限校验等操作 SpEL: 全称SpEL表达式, 可以理解为JSP的超级加强版, 使用得当可以为我们节省代码(此话为抄袭), 大家使用它最多的地方其实是引入配置, 例如: ...