package com.ruoyi.common.utils.bean; 
 | 
  
 | 
import java.lang.reflect.Method; 
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.regex.Matcher; 
 | 
import java.util.regex.Pattern; 
 | 
  
 | 
/** 
 | 
 * Bean 工具类 
 | 
 *  
 | 
 * @author ruoyi 
 | 
 */ 
 | 
public class BeanUtils extends org.springframework.beans.BeanUtils 
 | 
{ 
 | 
    /** Bean方法名中属性名开始的下标 */ 
 | 
    private static final int BEAN_METHOD_PROP_INDEX = 3; 
 | 
  
 | 
    /** * 匹配getter方法的正则表达式 */ 
 | 
    private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); 
 | 
  
 | 
    /** * 匹配setter方法的正则表达式 */ 
 | 
    private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); 
 | 
  
 | 
    /** 
 | 
     * Bean属性复制工具方法。 
 | 
     *  
 | 
     * @param dest 目标对象 
 | 
     * @param src 源对象 
 | 
     */ 
 | 
    public static void copyBeanProp(Object dest, Object src) 
 | 
    { 
 | 
        try 
 | 
        { 
 | 
            copyProperties(src, dest); 
 | 
        } 
 | 
        catch (Exception e) 
 | 
        { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取对象的setter方法。 
 | 
     *  
 | 
     * @param obj 对象 
 | 
     * @return 对象的setter方法列表 
 | 
     */ 
 | 
    public static List<Method> getSetterMethods(Object obj) 
 | 
    { 
 | 
        // setter方法列表 
 | 
        List<Method> setterMethods = new ArrayList<Method>(); 
 | 
  
 | 
        // 获取所有方法 
 | 
        Method[] methods = obj.getClass().getMethods(); 
 | 
  
 | 
        // 查找setter方法 
 | 
  
 | 
        for (Method method : methods) 
 | 
        { 
 | 
            Matcher m = SET_PATTERN.matcher(method.getName()); 
 | 
            if (m.matches() && (method.getParameterTypes().length == 1)) 
 | 
            { 
 | 
                setterMethods.add(method); 
 | 
            } 
 | 
        } 
 | 
        // 返回setter方法列表 
 | 
        return setterMethods; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取对象的getter方法。 
 | 
     *  
 | 
     * @param obj 对象 
 | 
     * @return 对象的getter方法列表 
 | 
     */ 
 | 
  
 | 
    public static List<Method> getGetterMethods(Object obj) 
 | 
    { 
 | 
        // getter方法列表 
 | 
        List<Method> getterMethods = new ArrayList<Method>(); 
 | 
        // 获取所有方法 
 | 
        Method[] methods = obj.getClass().getMethods(); 
 | 
        // 查找getter方法 
 | 
        for (Method method : methods) 
 | 
        { 
 | 
            Matcher m = GET_PATTERN.matcher(method.getName()); 
 | 
            if (m.matches() && (method.getParameterTypes().length == 0)) 
 | 
            { 
 | 
                getterMethods.add(method); 
 | 
            } 
 | 
        } 
 | 
        // 返回getter方法列表 
 | 
        return getterMethods; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 检查Bean方法名中的属性名是否相等。<br> 
 | 
     * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 
 | 
     *  
 | 
     * @param m1 方法名1 
 | 
     * @param m2 方法名2 
 | 
     * @return 属性名一样返回true,否则返回false 
 | 
     */ 
 | 
  
 | 
    public static boolean isMethodPropEquals(String m1, String m2) 
 | 
    { 
 | 
        return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); 
 | 
    } 
 | 
} 
 |