Spring AOP控制日志管理对修改字段比较提取插入

来源:互联网 发布:千里眼被淘宝屏蔽 编辑:程序博客网 时间:2024/05/22 15:16

本程序代码是基于ssh的

 

1 。 基于接口编程创建一个日志接口

package com.osnt.dao.recordLog;import java.io.Serializable;import com.osnt.dao.BaseDAO;//这里面包含了很多操作数据库的方法比如update,insert,select,deleteimport com.osnt.entity.RecordLog;public interface IRecordLog extends BaseDAO<RecordLog, Serializable> {//不需要任何方法,除非用户有自定的实现方法,BaseDao 里面已经包含公共的方法}

2.  我们拦截最底层的方法这里需要编写一个注解类

package com.osnt.dao.recordLog;import java.lang.annotation.Documented;   import java.lang.annotation.ElementType;   import java.lang.annotation.Retention;   import java.lang.annotation.RetentionPolicy;   import java.lang.annotation.Target;@Target({ElementType.METHOD})   @Retention(RetentionPolicy.RUNTIME)   @Documented public @interface RecordLogAnnotation {public String desc() default "not desc";//通过这里我们调用方法的时候就能确定是什么操作}

3. 创建日志实体对象

package com.osnt.entity;import java.sql.Timestamp;public class RecordLog  implements java.io.Serializable {    // Fields 以下字段应该很好理解吧   
     @javax.persistence.Id()     private String logId;     private String logUserId;     private String logUserName;     private String logModuleName;// 功能模块名称我是通过属性文件提取的
     private Long logFlag;     private String logDesc;     private Timestamp logCreateTime;     private String logNewComparyOld; //这里是存放更改或者删除后保存的原始数据和对比数据          public static final long LOG_FLAG_SUCCESS = 0;     public static final long LOG_FLAG_ERROR = 1;          public Timestamp getLogCreateTime() {return logCreateTime;}public void setLogCreateTime(Timestamp logCreateTime) {this.logCreateTime = logCreateTime;}public String getLogNewComparyOld() {return logNewComparyOld;}public void setLogNewComparyOld(String logNewComparyOld) {this.logNewComparyOld = logNewComparyOld;}    // Constructors/** default constructor */public RecordLog() {}        /** full constructor */    public RecordLog(String logUserId, String logUserName, String logModuleName, Long logFlag, String logDesc) {        this.logUserId = logUserId;        this.logUserName = logUserName;        this.logModuleName = logModuleName;        this.logFlag = logFlag;        this.logDesc = logDesc;    }       public String getLogId() {return logId;}   public void setLogId(String logId) {this.logId = logId;}    public String getLogUserId() {        return this.logUserId;    }        public void setLogUserId(String logUserId) {        this.logUserId = logUserId;    }    public String getLogUserName() {        return this.logUserName;    }        public void setLogUserName(String logUserName) {        this.logUserName = logUserName;    }    public String getLogModuleName() {        return this.logModuleName;    }        public void setLogModuleName(String logModuleName) {        this.logModuleName = logModuleName;    }    public Long getLogFlag() {        return this.logFlag;    }        public void setLogFlag(Long logFlag) {        this.logFlag = logFlag;    }    public String getLogDesc() {        return this.logDesc;    }        public void setLogDesc(String logDesc) {        this.logDesc = logDesc;    }}

4.创建RecordLog.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.osnt.entity">    <class name="RecordLog" table="record_log">        <id name="logId" type="java.lang.String">            <column name="log_id" length="36" />            <generator class="uuid" />        </id>        <property name="logUserId" type="java.lang.String">            <column name="log_user_id">                <comment>用户ID</comment>            </column>        </property>        <property name="logUserName" type="java.lang.String">            <column name="log_user_name">                <comment>用户名称</comment>            </column>        </property>        <property name="logModuleName" type="java.lang.String">            <column name="log_module_name">                <comment>模块名称</comment>            </column>        </property>        <property name="logFlag" type="java.lang.Long">            <column name="log_flag">                <comment>是否成功标记</comment>            </column>        </property>        <property name="logDesc" type="java.lang.String">            <column name="log_desc">                <comment>描述信息</comment>            </column>        </property>        <property name="logNewComparyOld" type="java.lang.String">            <column name="log_new_compary_old">                <comment>数据对比描述</comment>            </column>        </property>        <property name="logCreateTime" type="java.sql.Timestamp">            <column name="log_createtime">                <comment>创建时间</comment>            </column>        </property>    </class></hibernate-mapping>


5. 创建切面类(关键类处理和插入对象的)

 

package com.osnt.dao.recordLog;import java.sql.Timestamp;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import com.opensymphony.xwork2.ActionContext;import com.osnt.entity.RecordLog;import com.osnt.entity.User;@Aspect //切入类标识public class RecordLogAspect {public static final String SAVE = "save";public static final String UPDATE = "update";public static final String UPDATE_BY_HQL = "updateByHql";public static final String SAVE_OR_UPDATE = "saveOrUpdate";public static final String DELETE = "delete";public static final String DELETE_BY_CLASS_ID = "deleteByClassId";public static final String DELETE_BY_ID = "deleteById";public static final String DELETE_BY_HQL = "deleteByHql";public static final String SUCCESS = "success";public static final String ERROR = "error";private IRecordLog recordLogDAO;private RecordLog recordLog;private User user;private Object entityObject;private Object oldObject;private List<Object> oldObjectList;private Object newObject;private List<Object> newObjectList;private Object parameObject;private String targetClassName;private String entityPK;private String[] entityPKs;private boolean isExist;private boolean isDelChecked;private RecordLogUtil recordLogUtil = new RecordLogUtil();@Pointcut("execution(* com.osnt.dao..*.*(..))") //切入类的拦截地址private void anyMethod() {}/** * 前置通知 SAVE UDPATE DELETE * @throws Exception  */@Before("anyMethod() && @annotation(rla)")public void doAccessCheck(JoinPoint jp, RecordLogAnnotation rla){//获取代理类targetClassName = jp.getTarget().getClass().getName();if(!(jp.getTarget() instanceof RecordLogDAOImpl)){ActionContext context = ActionContext.getContext();HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);this.user = (User) request.getSession().getAttribute("user");//获取代理类的实体类entityObject = recordLogUtil.getEntityObject(targetClassName);Object[] parames = jp.getArgs();//获取执行方法的参数if(rla.desc().equals(SAVE)){//SAVEparameObject = recordLogUtil.parseParames(parames, entityObject);//通过实体类得到参数列表里的实体对象}else if(rla.desc().equals(UPDATE) || rla.desc().equals(DELETE)){//UPDATE DELETE实体操作parameObject = recordLogUtil.parseParames(parames, entityObject);//通过实体类得到参数列表里的实体对象entityPK = recordLogUtil.getFieldIdValue(parameObject);//解析对象参数返回ID值if(null != entityPK && !"".equals(entityPK)){oldObject = recordLogUtil.getObject(jp.getTarget(), entityPK);//得到原始数据(这里代表旧数据)}}else if(rla.desc().equals(SAVE_OR_UPDATE)){parameObject = recordLogUtil.parseParames(parames, entityObject);//通过实体类得到参数列表里的实体对象entityPK = recordLogUtil.getFieldIdValue(parameObject);//解析对象参数返回ID值if(null != entityPK && !"".equals(entityPK)){oldObject = recordLogUtil.getObject(jp.getTarget(), entityPK);//得到原始数据(这里代表旧数据)} }else if(rla.desc().equals(DELETE_BY_ID) || rla.desc().equals(DELETE_BY_CLASS_ID)){for(int i=0; i<parames.length; i++){//获取参数IDif(parames[i] instanceof String){entityPK = parames[i].toString();}}oldObject = recordLogUtil.getObject(jp.getTarget(), entityPK);}else if(rla.desc().equals(DELETE_BY_HQL)){//目前拦截到Action impl有几个不规则没有拦截String hql = parames[0].toString();Object[] ids = (Object[]) parames[1];oldObject = recordLogUtil.getObject(jp.getTarget(),entityObject, hql, ids);}}}/** * 后置通知,当目标方法执行成功后执行该方法  SAVE UDPATE DELETE */@AfterReturning("anyMethod() && @annotation(rla)")public void doAfterReturning(JoinPoint jp, RecordLogAnnotation rla) {if(!(jp.getTarget() instanceof RecordLogDAOImpl)){recordLog = new RecordLog();recordLog.setLogUserId(user.getUserId());recordLog.setLogUserName(user.getUserName());recordLog.setLogFlag(RecordLog.LOG_FLAG_SUCCESS);Timestamp time = new Timestamp(System.currentTimeMillis());recordLog.setLogCreateTime(time);String logModuleName = recordLogUtil.getModuleName(entityObject);recordLog.setLogModuleName(logModuleName);String logSuccessDesc = recordLogUtil.getTextDesc(rla.desc(),logModuleName,RecordLogAspect.SUCCESS);recordLog.setLogDesc(logSuccessDesc);if(rla.desc().equals(SAVE)){String logNew = recordLogUtil.getObjectToString(parameObject,"new");recordLog.setLogNewComparyOld(logNew);recordLogDAO.save(recordLog);}else if(rla.desc().equals(UPDATE)){if(null != entityPK && !"".equals(entityPK)){newObject = recordLogUtil.getObject(jp.getTarget(),entityPK);//得到更新后数据(这里代表新数据)String logNewComparyOld = recordLogUtil.getNewComparyOld(newObject,oldObject);recordLog.setLogNewComparyOld(logNewComparyOld);recordLogDAO.save(recordLog);}}else if(rla.desc().equals(DELETE)|| rla.desc().equals(DELETE_BY_ID) || rla.desc().equals(DELETE_BY_CLASS_ID) || rla.desc().equals(DELETE_BY_HQL)){String logOld = recordLogUtil.getObjectToString(oldObject,"old");recordLog.setLogNewComparyOld(logOld);recordLogDAO.save(recordLog);}else if(rla.desc().equals(SAVE_OR_UPDATE)){String comparyStr = "";if(null != entityPK && !"".equals(entityPK)){newObject = recordLogUtil.getObject(jp.getTarget(),entityPK);//得到更新后数据(这里代表新数据)comparyStr = recordLogUtil.getNewComparyOld(newObject,oldObject);}else{comparyStr = recordLogUtil.getObjectToString(parameObject,"new");}recordLog.setLogNewComparyOld(comparyStr);recordLogDAO.save(recordLog);}}}public User getUser() {return user;}public IRecordLog getRecordLogDAO() {return recordLogDAO;}public void setRecordLogDAO(IRecordLog recordLogDAO) {this.recordLogDAO = recordLogDAO;}public void setUser(User user) {this.user = user;}public RecordLogUtil getRecordLogUtil() {return recordLogUtil;}public void setRecordLogUtil(RecordLogUtil recordLogUtil) {this.recordLogUtil = recordLogUtil;}public Object getOldObject() {return oldObject;}public void setOldObject(Object oldObject) {this.oldObject = oldObject;}public Object getNewObject() {return newObject;}public void setNewObject(Object newObject) {this.newObject = newObject;}public String getTargetClassName() {return targetClassName;}public void setTargetClassName(String targetClassName) {this.targetClassName = targetClassName;}public RecordLog getRecordLog() {return recordLog;}public void setRecordLog(RecordLog recordLog) {this.recordLog = recordLog;}public Object getEntityObject() {return entityObject;}public void setEntityObject(Object entityObject) {this.entityObject = entityObject;}public String getEntityPK() {return entityPK;}public void setEntityPK(String entityPK) {this.entityPK = entityPK;}public Object getParameObject() {return parameObject;}public void setParameObject(Object parameObject) {this.parameObject = parameObject;}public boolean isExist() {return isExist;}public void setExist(boolean isExist) {this.isExist = isExist;}public String[] getEntityPKs() {return entityPKs;}public void setEntityPKs(String[] entityPKs) {this.entityPKs = entityPKs;}public List<Object> getOldObjectList() {return oldObjectList;}public void setOldObjectList(List<Object> oldObjectList) {this.oldObjectList = oldObjectList;}public List<Object> getNewObjectList() {return newObjectList;}public void setNewObjectList(List<Object> newObjectList) {this.newObjectList = newObjectList;}public boolean isDelChecked() {return isDelChecked;}public void setDelChecked(boolean isDelChecked) {this.isDelChecked = isDelChecked;}}

6. 在实现类里面加入注解实现拦截方法(这样编写我们不要动用ACTION业务类的代码只需要一行注解就搞定)

这里的BaseDAOImpl 就是我们项目的最底层数据操作类

public class BaseDAOImpl<T, PK extends Serializable> extends HibernateDaoSupport implements BaseDAO<T, PK> {private Class<T> entityClass;public void setEntityClass(Class<T> classzz) {this.entityClass = classzz;}public Class<T> getEntityClass(){return this.entityClass;}@RecordLogAnnotation(desc=RecordLogAspect.DELETE) // 这里是我们自定义的日志注解下面有好多个类型的public void delete(T entity) {removeAttachment(entity);super.getHibernateTemplate().delete(entity);}@RecordLogAnnotation(desc=RecordLogAspect.DELETE_BY_CLASS_ID)public void deleteById(Class entityClass, PK id) {super.getHibernateTemplate().delete(findById(entityClass, id));}@RecordLogAnnotation(desc=RecordLogAspect.DELETE_BY_ID)public void deleteById(PK id) {this.deleteById(this.entityClass, id);}@RecordLogAnnotation(desc=RecordLogAspect.DELETE_BY_HQL)public void deleteByHql(String hql , Object[] params) {Query query = super.getSession().createQuery(hql);this.setQueryParams(query, params);query.executeUpdate();}@RecordLogAnnotation(desc=RecordLogAspect.SAVE)public Serializable save(T entity) {saveAttachment(entity);return super.getHibernateTemplate().save(entity);}@RecordLogAnnotation(desc=RecordLogAspect.SAVE_OR_UPDATE)public void saveOrUpdate(T entity) {saveAttachment(entity);super.getHibernateTemplate().saveOrUpdate(entity);}@RecordLogAnnotation(desc=RecordLogAspect.UPDATE)public void update(T entity) {saveAttachment(entity);super.getHibernateTemplate().getSessionFactory().getCurrentSession().clear();super.getHibernateTemplate().update(entity);}@RecordLogAnnotation(desc=RecordLogAspect.UPDATE_BY_HQL)public void update(String hql, Object[] params) {Query query = super.getSession().createQuery(hql);this.setQueryParams(query, params);query.executeUpdate();}//这个方法是用于UPDATE或者delete 操作用的,在hibernate 里面如果在update 后进行 查询 会报异常说缓存里面有相同的标示public void sessionClear(){super.getHibernateTemplate().getSessionFactory().getCurrentSession().clear();}


7.配置Spring aop 实现切面编程applicationContext.xml


<aop:aspectj-autoproxy/> 只要加这一句就OK 了 就说明切面交给spring自动代理<bean id="recordLogAspect" class="com.osnt.dao.recordLog.RecordLogAspect"><property name="recordLogDAO" ref="recordLogDAO"></property></bean>//这句话一方面是注册这个切面类,里面的property 参数注入recordLogDAO 意思是我们能在切面类里面直接插入log到数据库


8.编写工具类,主要是针对字段比较需求编写的

package com.osnt.dao.recordLog;import java.io.Serializable;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Timestamp;import java.util.List;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.osnt.common.HibernateConfigurationTools;import com.osnt.common.Tools;import com.osnt.entity.Users;public class RecordLogUtil {/** *  * 通过实现类包名得到实体对象 * @param classUrl * @return */public Object getEntityObject(String classUrl){Object obj = null;try {Class<?> classType = Class.forName(classUrl);Method method = classType.getMethod("getEntityClass");obj =  method.invoke(classType.newInstance());} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}return obj;}/** * 在属性文件里找到实体对象的中文描述 * @param entityObj * @return */public String getModuleName(Object entityObj){if(null != entityObj){String entity = entityObj.toString();String entityName = entity.substring(entity.lastIndexOf(".")+1,entity.length());return RecordLogMessage.getInstance().getText(entityName);}return "";}/** *  * 拼接操作描述信息 * @param rla * @param moduleName * @param flag * @return */public String getTextDesc(String desc,String moduleName,String flag){return RecordLogMessage.getInstance().getText(desc)+moduleName+RecordLogMessage.getInstance().getText(flag);}/** * 通过ID得到原始数据 * @param target * @param ID * @return */public Object getObject(Object target,String ID){Object obj = null;try{Class<?> classType = target.getClass();Method findById = classType.getMethod("findById",new Class<?>[]{Serializable.class}); obj =  findById.invoke(target,new Object[]{ID});//Method sessionClear = classType.getMethod("sessionClear"); //sessionClear.invoke(target);} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} return obj;}public Object getObject(Object target,Object entityObject,String hql,Object[] ids){Object obj = null;StringBuffer splitJoint = new StringBuffer();splitJoint.append("from ");String entityStr = entityObject.toString();splitJoint.append(entityStr.substring(entityStr.lastIndexOf(".")+1,entityStr.length())+" ");splitJoint.append(hql.substring(hql.indexOf("where"),hql.length()).trim());try{Class<?> fieldType = Object[].class;Class<?> classType = target.getClass();Method findByHql = classType.getMethod("findByHql",new Class<?>[]{String.class,fieldType}); List list = (List)findByHql.invoke(target,new Object[]{splitJoint.toString(),ids});obj = list.get(0);Method sessionClear = classType.getMethod("sessionClear"); sessionClear.invoke(target);} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} return obj;}/** * 返回参数里面是否有当前操作实现类的实体对象 * @param parames * @param entityObject * @return */public Object parseParames(Object[] parames,Object entityObject) {Object obj = null;for(int i=0; i<parames.length; i++){if(parames[i].getClass().toString().equals(entityObject.toString())){obj = parames[i];return obj;}}return obj;}/** * 得到对象ID * @param newObject * @return */public String getFieldIdValue(Object newObject){String result = "";Field[] fields = newObject.getClass().getDeclaredFields();for (Field field : fields) {   if(field.isAnnotationPresent(javax.persistence.Id.class)) {           result = getFieldValue(newObject,field.getName()).toString();                      return result;        }}return result;}/** * 删除需要此方法得到原始数据 * @param oldObject * @return */public String getObjectToString(Object object,String flag){StringBuffer sb = new StringBuffer();int length = object.getClass().getDeclaredFields().length;Field[] fields = object.getClass().getDeclaredFields();for(int i=0; i<length; i++){Field field = fields[i];Object fieldValue = getFieldValue(object,field.getName());if(null != fieldValue && !"".equals(fieldValue.toString())){String chineseDesc = HibernateConfigurationTools.getCommentContent(object.getClass(), field.getName());if(field.isAnnotationPresent(javax.persistence.Id.class)){chineseDesc = "ID";}sb.append(chineseDesc+"=");sb.append("("+flag+":"+fieldValue.toString()+")");sb.append("#@#");}}//获取父类属性if(object.getClass().getSuperclass() != null){System.out.println(object.getClass().getSuperclass().getSimpleName());int superLength = object.getClass().getSuperclass().getDeclaredFields().length;Field[] superFields = object.getClass().getSuperclass().getDeclaredFields();for(int i=0; i<superLength; i++){Field field = superFields[i];Object fieldValue = getSuperFieldValue(object,field.getName());if(null != fieldValue && !"".equals(fieldValue.toString())){String chineseDesc = HibernateConfigurationTools.getCommentContent(object.getClass(), field.getName());if(field.isAnnotationPresent(javax.persistence.Id.class)){chineseDesc = "ID";}sb.append(chineseDesc+"=");sb.append("("+flag+":"+fieldValue.toString()+")");sb.append("#@#");}}}return sb.toString();}/** * 比对新添加的数据和原始数据拼接成字符串 * @param newObject * @param oldObject * @return */public String getNewComparyOld(Object newObject,Object oldObject){StringBuffer sb = new StringBuffer();int length = newObject.getClass().getDeclaredFields().length;Field[] newFields = newObject.getClass().getDeclaredFields();Field[] oldFields = oldObject.getClass().getDeclaredFields();for(int i=0; i<length; i++){Field newField = newFields[i];Field oldField = oldFields[i];Object newFieldValue = getFieldValue(newObject,newField.getName());Object oldFieldValue = getFieldValue(oldObject,oldField.getName());if((null != newFieldValue && null != oldFieldValue)){if(!newFieldValue.toString().equals(oldFieldValue.toString()) || newField.isAnnotationPresent(javax.persistence.Id.class)){String chineseDesc = HibernateConfigurationTools.getCommentContent(oldObject.getClass(), newField.getName());if(newField.isAnnotationPresent(javax.persistence.Id.class)){chineseDesc = "ID";}sb.append(chineseDesc+"=");sb.append("(new:"+newFieldValue.toString()+")");sb.append("(old:"+oldFieldValue.toString()+")");sb.append("#@#");}}}return sb.toString();}/** *  * 得到当对象字段的值 * @param obj * @param fieldName * @return */public Object getFieldValue(Object obj,String fieldName){Object filedValue = null;//获得字段第一个字母大写 String firstLetter = fieldName.substring(0,1).toUpperCase(); //转换成字段的get方法        String getMethodName = "get"+firstLetter+fieldName.substring(1);        //是否存在此方法        boolean checkGetMet = Tools.checkGetMet(obj.getClass().getDeclaredMethods(), getMethodName);        if(checkGetMet){try { Method fieldMethod = obj.getClass().getMethod(getMethodName); Object objValue = fieldMethod.invoke(obj); if(objValue instanceof Integer || objValue instanceof String || objValue instanceof Long || objValue instanceof Float || objValue instanceof Double || objValue instanceof Timestamp){ filedValue = objValue; }} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();}catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}        }return filedValue;}/** * 得到当对象父类字段的值 * @param obj * @param fieldName * @return */public Object getSuperFieldValue(Object obj,String fieldName){Object filedValue = null;//获得字段第一个字母大写 String firstLetter = fieldName.substring(0,1).toUpperCase(); //转换成字段的get方法        String getMethodName = "get"+firstLetter+fieldName.substring(1);        //是否存在此方法                boolean checkGetMet = Tools.checkGetMet(obj.getClass().getSuperclass().getDeclaredMethods(), getMethodName);        if(checkGetMet){try { Method fieldMethod = obj.getClass().getSuperclass().getMethod(getMethodName); Object objValue = fieldMethod.invoke(obj); if(objValue instanceof Integer || objValue instanceof String || objValue instanceof Long || objValue instanceof Float || objValue instanceof Double || objValue instanceof Timestamp){ filedValue = objValue; }} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();}catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}        }return filedValue;}/** * 判断方法是否存在 * @param targetMethod * @param methodNames * @return */public boolean isExistMethod(final String targetMethod,final String... methodNames){for(String methodName : methodNames){Pattern pattern = Pattern.compile(methodName);Matcher matcher = pattern.matcher(targetMethod);if(matcher.find()){return true;}}return false;}}


9.获取模块中文名称类

package com.osnt.dao.recordLog;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class RecordLogMessage {Properties properties;private static RecordLogMessage instance = new RecordLogMessage();public static RecordLogMessage getInstance(){if(null == instance){instance = new RecordLogMessage();}return instance;}@SuppressWarnings("unchecked")public RecordLogMessage(){try {InputStream in = RecordLogMessage.class.getResourceAsStream("/recordLogMessage.properties");  properties = new Properties();try {properties.load(in);} catch (Exception e) {throw e;} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}} catch (Exception e) {e.printStackTrace();}}public String getText(String key){String msg = (String)properties.get(key);if (msg == null)return null;return msg;}}


10.属性文件 比如 保存 成功 失败 AccidentEvidence = 业务类名称

save=\u63D2\u5165delete=\u5220\u9664deleteById=\u5220\u9664deleteByClassId=\u5220\u9664deleteByHql=\u5220\u9664update=\u4FEE\u6539saveOrUpdate=\u63D2\u5165\u6216\u4FEE\u6539success=\u6210\u529Ferror=\u5931\u8D25AccidentEvidence=\u6EA2\u6CB9\u4E8B\u6545



 

原创粉丝点击