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统一处理修改人、创建人、修改时间、创建时间的更多相关文章

  1. 如何修改文件的 “创建时间” 和 “修改时间”(Windows Linux macOS)

    请访问原文链接:https://sysin.org/blog/how-to-change-file-date,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www ...

  2. Linux如何查找文件的创建时间

    Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext.ext2.ext3),文件的元数据不会记录文件的创建时间,它只会记录访问时间.修改时间.更改时间(状态 ...

  3. Linux 如何用命令查看binlog文件的创建时间

    目录 背景 分析 方法 注意 背景 MySQL在26日 16:23:49产生了大量的慢查询,在这段时间内,binlog文件刷新的很快(查看慢日志是mysql DML并发比较多),想知道写完一个binl ...

  4. 通过自定义特性,使用EF6拦截器完成创建人、创建时间、更新人、更新时间的统一赋值(使用数据库服务器时间赋值,接上一篇)

    目录: 前言 设计(完成扩展) 实现效果 扩展设计方案 扩展后代码结构 集思广益(问题) 前言: 在上一篇文章我写了如何重建IDbCommandTreeInterceptor来实现创建人.创建时间.更 ...

  5. 修改SQL Server数据库表的创建时间最简单最直接有效的方法

    说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一 ...

  6. Web 在线文件管理器学习笔记与总结(2)显示文件列表(名称,类型,大小,可读,可写,可执行,创建时间,修改时间,访问时间)

    主要函数: filetype() 判断文件类型 filesize() 得到文件大小(字节) is_readable() 判断文件是否可读 is_writeable() 判断文件是否可写 is_exec ...

  7. touch修改文件的修改时间和访问时间,ls --full-time显示文件详细,stat命令

    1. 同时修改文件的修改时间和访问时间 touch -d "2010-05-31 08:10:30" test.doc 2. 只修改文件的修改时间 touch -m -d &quo ...

  8. Laravel / Lumen 框架修改 创建时间 和 更新时间 对应字段

    为避免浪费时间--先上解决方案 在Model中重写 CREATED_AT 和 UPDATED_AT 两个类常量就可以了,这两个常量分别是创建时间和更新时间的字段名. ================= ...

  9. 查看和修改Linux服务器的时区和时间

    一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...

随机推荐

  1. JS ~ Promise.reject()

    概述: Promise.reject(reason)方法返回一个带有拒绝原因reason参数的Promise对象. 语法 Promise.reject(reason); reason :  表示Pro ...

  2. 4 react 简书 引入 redux 的 combineReducers 对 redux 数据进行管理

    1. src 下的 common 下的 header 创建 store 文件夹 下创建 reducer.js # src/common/header/store/reducer.js const st ...

  3. DispatcherServlet(2)_HandlerMapping

    HandlerMapping_xmind SpringMVC默认提供的HandlerMapping BeanNameUrlHandlerMapping SimpleUrlHandlerMapping ...

  4. hive的join优化

    “国际大学生节”又称“世界大学生节”.“世界学生日”.“国际学生日”.1946年,世界各国学生代表于布拉格召开全世界学生大会,宣布把每年的11月17日定为“世界大学生节”,以加强全世界大学生的团结和友 ...

  5. 使用代理IP访问网络

    现在很多领域都需要用到代理IP,用到的领域越来越广,如爬虫.投票.抢购等等. 代理IP免费获取地址:http://www.xicidaili.com/(少部分可以用) 我这个案例使用的上面地址里面的免 ...

  6. 谈IO中的阻塞和非阻塞,同步和异步及三种IO模型

    什么是同步和异步? 烧水,我们都是通过热水壶来烧水的.在很久之前,科技还没有这么发达的时候,如果我们要烧水,需要把水壶放到火炉上,我们通过观察水壶内的水的沸腾程度来判断水有没有烧开.随着科技的发展,现 ...

  7. CSS3新特性—过渡、转换

    过渡 转换 2D转换 2D转换包括四个方面:位移,缩放,旋转,倾斜 位移[让元素移动位置] transform: translate(100px,100px); 备注: 1. 如果只设置一个值,那么代 ...

  8. java AES加解密

    AES加解密工具类 package com.yan.demo; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64D ...

  9. F5 BIG-IPLTM但比组网的三种连接模式(转)

    原文链接:https://www.cnblogs.com/yujianadu/p/11850977.html作者:遇见阿杜

  10. windows下关闭自动更新方法

    第一种方法: 1.windows+R键打开运行窗口,输入services.msc 2.找到windows update服务右键属性 第二种方法 Win键+R键在弹出的运行对话框中输入gpedit.ms ...