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" 方法 ...
随机推荐
- 基于UWB技术的DW1000芯片简单解析
近些年来随着物联网和机器人技术的大发展,精确定位技术的热度也随之攀升.目前精确定位的技术有很多,如基于wifi.RFID.zigbee.超声波.UWB等技术都可以实现精准定位.由于技术的不同,精度也不 ...
- cf 453A.Little Pony and Expected Maximum
水了一上午.. 拿6面举例子吧,因为是投掷m次取最大,最大是1概率(1/6)^m;最大是2就可以取到(1,2)那么概率就是(1/3)^m-(1/6)^m.(当前减去上一个) #include<b ...
- SFINAE 与 type_traits
SFINAE 与 type_traits SFINAE 替换失败不是错误 (Substitution Failure Is Not An Error),此特性被用于模板元编程. 在函数模板的重载决议中 ...
- 转: 十大Intellij IDEA快捷键
Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...
- statement 、prepareStatement的用法和解释
转自:http://blog.csdn.net/QH_JAVA/article/details/48245945 一.prepareStatement 的用法和解释 1.PreparedState ...
- stm32cube 安装 patch
首先正常安装芯片包,然后在设置里面找到当前包存放的位置,默认是: C:\Users\Administrator\STM32Cube\Repository 然后解压 更新包,把更新包里面的文件覆盖到 C ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:运算符
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- web系统能力培养计划
服务器知识掌握如下 01购买linux服务器 客户端工具:https://mobaxterm.mobatek.net/download.html 02linux常用命令 https://www.run ...
- Windows添加远程访问用户
Windows远程访问 命令:mstsc ------------------------------------------------------------------------------- ...
- oracle 导入问题(imp)
oracle 导入问题(imp) 1.密码过期 [oracle @oracle ~]$ imp graph/graph@orcl file=/tmp/neo4j.dmp full=y; 解决方案: 使 ...