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. 关于低成本Sub-1Ghz无线射频方案首选:CMT2110A

    对于现在的无线遥控市场竞争力极大,不过是在成本方面和性能方面大家都希望能做到精打细算,目前超低功耗Sub-1Ghz 首选方案是CMT2110/17A 芯片具有超低成本,高性能灵活的单芯片OOK发射器, ...

  2. tableau创建定量值地图

    一.官方案例:定量值地图的创建 数据形式:  过程: 分别双击经纬度(默认的纬度会自动添加到行功能区,经度到列功能区) 将Id放入标记卡详细信息 将Magnitude^10(震级^10)放入大小,(该 ...

  3. Eclipse 快速打开文件所在的本地目录

    目前收集到两种方法: 1.快捷键:Ctrl+Shift+W 2.利用Eclipse的External Tools设置快捷方式 第二种方法步骤: a.Run->External Tools-> ...

  4. 新手转行必知!Python和Java到底有啥区别?

    TIOBE 9月编程语言排行榜中Java第一,但PYPL 9月排行榜中Python却是第一.两个编程语言排行榜均是旨在给开发者做一个学习参考,那么问题来了:Java和Python都很火,两个语言到底有 ...

  5. DevOps专题|基础Agent部署系统

    随着京东云业务规模.管理机器规模的扩大,各类agent也在逐渐增多,如日志agent.监控agent.控制系统agent等.这对agent的部署.升级.状态维护提出了很高的要求,一旦某个全局agent ...

  6. Android进阶——多线程系列之四大线程池的使用介绍

    线程池一直是初学者最抵触的东西,由于刚开始学习做项目并不会涉及到线程池的使用,但是不去学习它,心里又好像有个石头一直沉着,一直放心不下,其实是很简单的东西,早晚都要学,不如趁现在吧.由于文章从初学者的 ...

  7. C#高级编程(第9版) 第08章 委托、lambda表达式和事件 笔记

          本章代码分为以下几个主要的示例文件: 1. 简单委托 2. 冒泡排序 3. lambda表达式 4. 事件示例 5. 弱事件     引用方法 委托是寻址方法的.NET版本.在C++中函数 ...

  8. 1.softmax初探

    1.softmax初探在机器学习尤其是深度学习中,softmax是个非常常用而且比较重要的函数,尤其在多分类的场景中使用广泛.他把一些输入映射为0-1之间的实数,并且归一化保证和为1,因此多分类的概率 ...

  9. 用户使用API函数对创建的文件进行读写操作

    HANDLE handle; //定义文件句柄 ]; //定义缓冲区 int i; //接收实际操作的字节数 CString str; //定义字符串变量 handle = ::CreateFile( ...

  10. 直击JDD | 陈生强:京东数科的底层是数字化操作系统

    11月19日,由京东集团主办的JDD-2019京东全球科技探索者大会在京开幕,京东数字科技集团CEO陈生强作了题为"以科技为美,为价值而生"的主旨发言,再论"数字科技&q ...