懒羊羊
2024-01-31 e57a8990ae56f657a59c435a0613c5f7a8728003
提交 | 用户 | 时间
e57a89 1 package com.jcdm.common.utils.bean;
2
3 import java.lang.reflect.Method;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
8
9 /**
10  * Bean 工具类
11  * 
12  * @author jc
13  */
14 public class BeanUtils extends org.springframework.beans.BeanUtils
15 {
16     /** Bean方法名中属性名开始的下标 */
17     private static final int BEAN_METHOD_PROP_INDEX = 3;
18
19     /** * 匹配getter方法的正则表达式 */
20     private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)");
21
22     /** * 匹配setter方法的正则表达式 */
23     private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)");
24
25     /**
26      * Bean属性复制工具方法。
27      * 
28      * @param dest 目标对象
29      * @param src 源对象
30      */
31     public static void copyBeanProp(Object dest, Object src)
32     {
33         try
34         {
35             copyProperties(src, dest);
36         }
37         catch (Exception e)
38         {
39             e.printStackTrace();
40         }
41     }
42
43     /**
44      * 获取对象的setter方法。
45      * 
46      * @param obj 对象
47      * @return 对象的setter方法列表
48      */
49     public static List<Method> getSetterMethods(Object obj)
50     {
51         // setter方法列表
52         List<Method> setterMethods = new ArrayList<Method>();
53
54         // 获取所有方法
55         Method[] methods = obj.getClass().getMethods();
56
57         // 查找setter方法
58
59         for (Method method : methods)
60         {
61             Matcher m = SET_PATTERN.matcher(method.getName());
62             if (m.matches() && (method.getParameterTypes().length == 1))
63             {
64                 setterMethods.add(method);
65             }
66         }
67         // 返回setter方法列表
68         return setterMethods;
69     }
70
71     /**
72      * 获取对象的getter方法。
73      * 
74      * @param obj 对象
75      * @return 对象的getter方法列表
76      */
77
78     public static List<Method> getGetterMethods(Object obj)
79     {
80         // getter方法列表
81         List<Method> getterMethods = new ArrayList<Method>();
82         // 获取所有方法
83         Method[] methods = obj.getClass().getMethods();
84         // 查找getter方法
85         for (Method method : methods)
86         {
87             Matcher m = GET_PATTERN.matcher(method.getName());
88             if (m.matches() && (method.getParameterTypes().length == 0))
89             {
90                 getterMethods.add(method);
91             }
92         }
93         // 返回getter方法列表
94         return getterMethods;
95     }
96
97     /**
98      * 检查Bean方法名中的属性名是否相等。<br>
99      * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。
100      * 
101      * @param m1 方法名1
102      * @param m2 方法名2
103      * @return 属性名一样返回true,否则返回false
104      */
105
106     public static boolean isMethodPropEquals(String m1, String m2)
107     {
108         return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX));
109     }
110 }