AOP统一处理修改人、创建人、修改时间、创建时间
1.配置拦截
首先开启
<aop:aspectj-autoproxy proxy-target-class="true"/>代理。解释一下下面..的意思是多个
<bean id="dalAop" class="com.biz.common.aop.DalAop" />
<aop:config>
<aop:aspect ref="dalAop" >
<aop:before method="beforeInsert" pointcut="execution(* com.dal.*.mapper..*.insert*(..))" />
<aop:before method="beforeUpdate" pointcut="execution(* com.dal.*.mapper..*.update*(..))" />
<aop:before method="beforeUpdate" pointcut="execution(* com.dal.*.mapper..*.remove*(..))" />
<aop:before method="beforeUpdate" pointcut="execution(* com..dal.*.mapper..*.delete*(..))" />
</aop:aspect>
</aop:config>
2.实体类
package com.biz.common.aop; import java.util.Date;
import java.util.Map; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl; import com.auth.privilege.PrivilegeInfo; /**
* 类DalAop.java的实现描述:对DAO插入和更新方法的拦截,并设置公共字段的信息
*
*
*/
public class DalAop { private static final String CREATOR = "creator";
private static final String MODIFIER = "modifier";
private static final String GMTCREATE = "gmtCreate";
private static final String GMTMODIFIED = "gmtModified";
@Resource
private PrivilegeInfo privilegeInfo; public void beforeInsert(JoinPoint jp) {
Object[] args = jp.getArgs(); if (args != null && args.length > 0) {
Object argument = args[0];
BeanWrapper beanWrapper = new BeanWrapperImpl(argument);
// 设置创建时间和修改时间
if (beanWrapper.isWritableProperty(GMTCREATE)) {
beanWrapper.setPropertyValue(GMTCREATE, new Date());
}
if (beanWrapper.isWritableProperty(GMTMODIFIED)) {
beanWrapper.setPropertyValue(GMTMODIFIED, new Date());
}
// 设置创建人和修改人
if (beanWrapper.isWritableProperty(CREATOR) && privilegeInfo != null
&& StringUtils.isNotBlank(privilegeInfo.getWorkNo())) {
beanWrapper.setPropertyValue(CREATOR, privilegeInfo.getWorkNo());
}
if (beanWrapper.isWritableProperty(MODIFIER) && privilegeInfo != null
&& StringUtils.isNotBlank(privilegeInfo.getWorkNo())) {
beanWrapper.setPropertyValue(MODIFIER, privilegeInfo.getWorkNo());
}
}
} @SuppressWarnings({ "rawtypes", "unchecked" })
public void beforeUpdate(JoinPoint jp) { Object[] args = jp.getArgs();
// myBatis只能传递一个参数
if (args != null && args.length > 0) {
Object argument = args[0]; // 如果argument是map类型
if (argument instanceof Map) {
Map map = (Map) argument;
map.put(GMTMODIFIED, new Date());
if (privilegeInfo != null && StringUtils.isNotBlank(privilegeInfo.getWorkNo())) {
map.put(MODIFIER, privilegeInfo.getWorkNo());
}
} else {
BeanWrapper beanWrapper = new BeanWrapperImpl(argument);
if (beanWrapper.isWritableProperty(GMTMODIFIED)) {
beanWrapper.setPropertyValue(GMTMODIFIED, new Date());
}
if (beanWrapper.isWritableProperty(MODIFIER) && privilegeInfo != null
&& StringUtils.isNotBlank(privilegeInfo.getWorkNo())) {
beanWrapper.setPropertyValue(MODIFIER, privilegeInfo.getWorkNo());
}
}
}
}
}
AOP统一处理修改人、创建人、修改时间、创建时间的更多相关文章
- 如何修改文件的 “创建时间” 和 “修改时间”(Windows Linux macOS)
请访问原文链接:https://sysin.org/blog/how-to-change-file-date,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www ...
- Linux如何查找文件的创建时间
Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext.ext2.ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间.修改时间.更改时间(状态 ...
- Linux 如何用命令查看binlog文件的创建时间
目录 背景 分析 方法 注意 背景 MySQL在26日 16:23:49产生了大量的慢查询,在这段时间内,binlog文件刷新的很快(查看慢日志是mysql DML并发比较多),想知道写完一个binl ...
- 通过自定义特性,使用EF6拦截器完成创建人、创建时间、更新人、更新时间的统一赋值(使用数据库服务器时间赋值,接上一篇)
目录: 前言 设计(完成扩展) 实现效果 扩展设计方案 扩展后代码结构 集思广益(问题) 前言: 在上一篇文章我写了如何重建IDbCommandTreeInterceptor来实现创建人.创建时间.更 ...
- 修改SQL Server数据库表的创建时间最简单最直接有效的方法
说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一 ...
- Web 在线文件管理器学习笔记与总结(2)显示文件列表(名称,类型,大小,可读,可写,可执行,创建时间,修改时间,访问时间)
主要函数: filetype() 判断文件类型 filesize() 得到文件大小(字节) is_readable() 判断文件是否可读 is_writeable() 判断文件是否可写 is_exec ...
- touch修改文件的修改时间和访问时间,ls --full-time显示文件详细,stat命令
1. 同时修改文件的修改时间和访问时间 touch -d "2010-05-31 08:10:30" test.doc 2. 只修改文件的修改时间 touch -m -d &quo ...
- Laravel / Lumen 框架修改 创建时间 和 更新时间 对应字段
为避免浪费时间--先上解决方案 在Model中重写 CREATED_AT 和 UPDATED_AT 两个类常量就可以了,这两个常量分别是创建时间和更新时间的字段名. ================= ...
- 查看和修改Linux服务器的时区和时间
一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...
随机推荐
- 关于RxJS 处理多个Http请求 串行与并行方法
mergeMap mergeMap 操作符用于从内部的 Observable 对象中获取值,然后返回给父级流对象. 合并 Observable 对象 123456 import { of } from ...
- Arduino - -- 串口双向通信
需要用到Arduino UNO的串口双向通信功能,以下源码: int val; void setup() { Serial.begin(9600); // opensserial port, se ...
- Aizu 2155 Magic Slayer 背包DP
这是上上次对抗赛的题目了 其实现在发现整个代码从头到尾,都是用了背包,怪我们背包没深入学好. 比赛的时候,聪哥提出的一种思路是,预处理一下,背包出 ALL攻击 和 single攻击的 血量对应的最小花 ...
- 滴滴与Uber都盯上拉美市场!一场惨烈竞争谁能胜出?
创业者最怕的是什么?或许并不是在创业初期的艰难历程.毕竟在初期虽然会遇到很多磨难和众多竞争对手,但只要敢打敢拼就有胜出的可能.创业者最怕的或许是成为所属行业独角兽后,要面对势均力敌对手的凶猛攻击!大家 ...
- JZOJ-TGB817-SOL
T1 题面 "封印大典启动,请出Nescafe魂珠!"随着圣主applepi一声令下,圣剑护法rainbow和魔杖护法freda将Nescafe魂珠放置于封印台上.封印台是一个树形 ...
- 18 12 27 css 盒模型使用 以及相关技巧问题 元素溢出 块元素、内联元素、内联块元素
盒子模型的实际尺寸 盒子的width和height设置的是盒子内容的宽和高,不是盒子本身的宽和高,盒子的真实尺寸计算公式如下: 盒子宽度 = width + padding左右 + border左右 ...
- VBE2019的下载、安装和使用(最新版2020.2.22)
VBE2019可用于XP系统.Windows 7和Windows 10的32位.64位Office对应的VBA环境 安装包下载地址:VBE2019-Setup.zip 下载后解压缩,直接双击安装(请勿 ...
- k8s 使用新增user配置kubectl在各个节点都可运行
k8s增加普通用户User 普通用户并不是通过k8s来创建和维护,是通过创建证书和切换上下文环境的方式来创建和切换用户.其实创建用户的步骤,就是手动部署k8s集群里的一个步骤.创建过程见下: 1.创建 ...
- Linux下mysql5.7安装
当前最新版本为5.7,此次将分别采用yum安装和tar包编译安装的方式分别说明. 一.Yum安装 A:获取repo源 [root@localhost ~]# wget http://dev.mysql ...
- Python 学习笔记:Python 使用 pandas 读取数据库并进行绘图
上次写了在 Python 怎么使用 mssql 库来对 SQL Server 数据库进行增删查改,今天就写一下 Python 如何通过 pandas 来读取数据库并进行绘图. 一.读取数据库: 利用 ...