1. package com.ruoyi.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 ruoyi
  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. }

ruoyi BeanUtils的更多相关文章

  1. ruoyi ShiroUtils

    package com.ruoyi.framework.util; import org.apache.shiro.SecurityUtils; import org.apache.shiro.cry ...

  2. java jdbc的优化之BeanUtils组件

    1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...

  3. BeanUtils.populate(obj, map);

    public static void populate(Object bean, Map<String, ? extends Object> properties) throws Ille ...

  4. Beanutils基本用法

    Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的.无论谁的项目,始终一天都会用得上它.我算是后知后觉了,第一回看到它的时候居然错过. 1.属性的动态gett ...

  5. BeanUtils

    BeanUtils包的使用   BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: ...

  6. BeanUtils.copyProperties()方法和PropertyUtils.copyProperties()的区别

    首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.Prop ...

  7. Apache Commons BeanUtils

    http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanut ...

  8. 利用BeanUtils在对象间复制属性

    commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很 ...

  9. BeanUtils.copyProperties() 用法

    BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处 ...

随机推荐

  1. 如何将sql文件导入数据库

    打开navicat.exe,点击打开数据库,右键-运行SQL文件,选中要运行的sql文件,确定后再点击表即可. 注意:此次改变后,源sql文件可以转移路径

  2. 吴裕雄--天生自然C++语言学习笔记:C++ 引用

    引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量 C++ 引用 vs 指针 引用很容易与指针混淆,它们之间有三个主要的 ...

  3. Ubuntu 18.04 配置 adb

    Reference1:  https://www.jianshu.com/p/377c6fb6e590 Reference2:  https://blog.csdn.net/ppggxn/articl ...

  4. php语言注意点

    PHP大小写问题 http://www.jb51.net/article/38579.htm 推荐大家始终坚持“大小写敏感”,遵循统一的代码规范.1. 变量名区分大小写 2. 函数名.方法名.类名不区 ...

  5. mysql数据库索引优化

    参考 :http://www.cnblogs.com/yangmei123/archive/2016/04/10/5375723.html MySQL数据库的优化:    数据库优化的目的:     ...

  6. OC项目加入swift第三方库遇到的坑

    https://www.jianshu.com/p/96d868dcd69c 2017.07.07 16:23* 字数 295 阅读 5218评论 2喜欢 4 首先,在OC项目的Podfile文件中添 ...

  7. Android自定义View——自定义ViewPager

      第一部分:自定义ViewGroup的使用,手势识别器和Scroller滑动 第二部分:处理滑动监听,处理滑动冲突,增加ViewPager的指示器   常见的滑动冲突:外部滑动方向和内部滑动方向不一 ...

  8. JavaSE--java是值传递还是引用传递

    引用是已定义的变量的别名. 按引用传递就是一个变量使用两个名称. 两个变量在内存中的地址都是一样的. 按值传递, 传递的是值的拷贝. C++中可以通过传引用来改变传入的参数的值.在C++中可以通过以下 ...

  9. MySQL--从库启动复制报错1236

    链接:http://blog.csdn.net/yumushui/article/details/42742461 今天在搭建一个MySQL master-slave集群时,执行了change mas ...

  10. JS实现时间选择器

    源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...