zoukankan      html  css  js  c++  java
  • 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());
                    }
                }
            }
        }
    }
    雪人正在努力……
  • 相关阅读:
    10进制转换为二十六进制字符串A-Z
    解决Missing artifact jdk.tools:jdk.tools:jar:1.8报错
    JAVA中AES对称加密和解密以及与Python兼容
    Nginx配置客户端SSL双向认证
    (备忘)最全的正则表达式
    (备忘)Python字符串、元组、列表、字典互相转换的方法
    (备忘)Nodepad++常用快捷键
    (备忘)正则表达式全部符号解释
    (备忘)Window7下安装Python2.6及Django1.4
    (备忘)Java Map 遍历
  • 原文地址:https://www.cnblogs.com/nunuAction/p/5946627.html
Copyright © 2011-2022 走看看