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());
                    }
                }
            }
        }
    }
    雪人正在努力……
  • 相关阅读:
    xdoj1194----(bsgs-用数组实现链表 真的是好啊)
    hdoj-4417(做法二 树状数组离线解法,对所有的查询先保存进行排序后有序的查询) 好腻害!
    线段树专题2-(加强版线段树-可持续化线段树)主席树 orz! ------用于解决区间第k大的问题----xdoj-1216
    线段树专题1(用于解决区间问题)
    ccf-170902-公共钥匙盒(模拟)
    字典(NSDictionary)的使用
    ios 加载资源中的Html
    iOS 使用自定义手势屏蔽按钮解决方法/UITapGestureRecognizer屏蔽Button
    有时UIGestureRecognizer手势识别不出来问题分析及方案
    XCode的一些调试技巧
  • 原文地址:https://www.cnblogs.com/nunuAction/p/5946627.html
Copyright © 2011-2022 走看看