文章开头.jpg
commons-beanutils是**Apache开源组织提供的用于操作JAVA BEAN的工具包**。使用commons-beanutils,我们**可以很方便的对bean对象的属性进行操作

导入maven

  1. <dependency>
  2. <groupId>commons-beanutils</groupId>
  3. <artifactId>commons-beanutils</artifactId>
  4. <version>1.9.3</version>
  5. </dependency>

编写一个用于测试的BEAN类:

  1. public class UserInfo
  2. {
  3. private String userId;
  4. private String userName;
  5. public UserInfo()
  6. {
  7. }
  8. public UserInfo(String userId, String userName)
  9. {
  10. this.userId = userId;
  11. this.userName = userName;
  12. }
  13. public String getUserId()
  14. {
  15. return userId;
  16. }
  17. public void setUserId(String userId)
  18. {
  19. this.userId = userId;
  20. }
  21. public String getUserName()
  22. {
  23. return userName;
  24. }
  25. public void setUserName(String userName)
  26. {
  27. this.userName = userName;
  28. }
  29. @Override
  30. public String toString()
  31. {
  32. return String.format("{userId:%s,userName:%s}", userId, userName);
  33. }
  34. }

MethodUtils

(1) . MethodUtils主要作用

通过反射访问对象的方法并且执行方法。

(2) . MethodUtils常用方法摘要

返回值 方法名 说明
static int clearCache() 清空方法缓存
static Method getAccessibleMethod(Class<?> clazz, Method method) 返回一个可访问的方法
static Method getAccessibleMethod(Class<?> clazz, String methodName, Class<?> parameterType) 返回一个可访问的方法
static Object invokeExactMethod(Object object, String methodName, Object arg) 执行方法

(3) . 使用示例

public class MethodUtilsTest
{
   @Test
   public void test() throws Exception
   {
      UserInfo userInfo = new UserInfo();
      // 通过方法名和参数类型获得可访问方法
      Method method = MethodUtils.getAccessibleMethod(UserInfo.class,
            "setUserId", String.class);
      method.invoke(userInfo, "wzy");
      // 可以直接通过invokeMethod执行方法
      MethodUtils.invokeMethod(userInfo, "setUserName", "王振宇");
      System.out.println(userInfo);
   }
}

(4) . 运行结果

{userId:wzy,userName:王振宇}

ConstructorUtils

(1) . ConstructorUtils主要作用

通过反射提供了构造方法相关的便捷操作方法

(2) . ConstructorUtils常用方法摘要

返回值 方法名 说明
static Constructor getAccessibleConstructor(Class klass, Class<?> parameterType) 获得含有一个形参的构造方法
static Constructor getAccessibleConstructor(Class klass, Class<?>[] parameterTypes) 获得含有指定类型形参的构造方法
static T invokeConstructor(Class klass, Object arg) 执行构造方法
static T invokeConstructor(Class klass, Object[] args, Class<?>[] parameterTypes) 执行构造方法

(3) . 使用示例

public class ConstructorUtilsTest
{
   @Test
   public void test() throws Exception
   {
      Constructor<UserInfo> constructor = ConstructorUtils
            .getAccessibleConstructor(UserInfo.class, new Class[] {
                  String.class, String.class });
      System.out.println(constructor.newInstance("wzy", "王振宇"));
      // 更简洁的写法
      UserInfo userInfo = ConstructorUtils.invokeConstructor(UserInfo.class,
            new String[] { "wzy", "=王振宇" });
      System.out.println(userInfo);
   }
}

(4) . 运行结果

{userId:wzy,userName:王振宇}
{userId:wzy,userName:王振宇}

PropertyUtils

(1) . PropertyUtils主要作用

通过反射提供了对象属性的便捷操作方法

(2) . PropertyUtils常用方法摘要

返回值 方法名 说明
static void copyProperties(Object dest, Object orig) 复制属性
static Map describe(Object bean) 属性描述
static Object getProperty(Object bean, String name) 获得属性
static void setProperty(Object bean, String name, Object value) 设置属性值

(3) . 使用示例

public class PropertyUtilsTest
{
   @Test
   public void test() throws Exception
   {
      UserInfo userInfo = new UserInfo("wzy", "王振宇");
      UserInfo copyed = new UserInfo();
      PropertyUtils.copyProperties(copyed, userInfo);
      System.out.println(copyed);
      System.out.println(PropertyUtils.describe(userInfo));
      PropertyUtils.setProperty(userInfo, "userId", "wangzhenyu");
      System.out.println(userInfo);
   }

(4) . 运行结果

{userId:wzy,userName:王振宇}
{userId=wzy, class=class com.gujin.entity.UserInfo, userName=王振宇}
{userId:wangzhenyu,userName:王振宇}

BeanUtils

(1) . BeanUtils主要作用

通过反射提供了Bean对象的便捷操作方法,[**org.springframework.beans.BeanUtils区别要主要—-[区别](https://blog.csdn.net/tjbsl/article/details/49246113)自行百度**]

(2) . BeanUtils常用方法摘要

返回值 方法名 说明
static Object cloneBean(Object bean) 克隆对象
static void copyProperties(Object dest, Object orig) 复制属性
static void populate(Object bean, Map properties) 将Map中的数据注入到Bean对象中
static void setProperty(Object bean, String name, Object value) 设置属性值

(3) . 使用示例

public class BeanUtilsTest
{
   @Test
   public void test() throws Exception
   {
      UserInfo userInfo = new UserInfo();
      HashMap<String, String> properties = new HashMap<String, String>();
      properties.put("userId", "wzy");
      properties.put("userName", "王振宇");
      BeanUtils.populate(userInfo, properties);
      System.out.println(userInfo);
   }
}
 public User buildEntity() {  //org.springframework.beans.BeanUtils比较方便,commons-beanutils比较复杂,前者使用多
        User user = new User();
        //org.springframework.beans.BeanUtils包,作用复制对象使用setXXX方法把属性转换成另一个javaBean
        BeanUtils.copyProperties(this,user);
        return user;
  }

(4) . 运行结果

{userId:wzy,userName:王振宇}

ConvertUtils

(1) . ConvertUtils主要方法

提供了数据类型相互转换的方法。

(2) . ConvertUtils常用方法摘要

返回值 方法名 说明
static String convert(Object value) 将对象转换为字符串
static Object convert(Object value, Class<?> targetType) 将对象转换为指定数据类型对象
static Object convert(String[] values, Class<?> clazz) 将数组转换为指定数据类型对象
static Object convert(String value, Class<?> clazz) 将字符串转换为指定数据类型对象

(3) . 使用示例

public class ConvertUtilsTest
{
   @Test
   public void test() throws Exception
   {
      ConvertUtils.register(new Converter()
      {

         @Override
         public <T> T convert(Class<T> arg0, Object arg1)
         {
            try
            {
               return (T) new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                     .parse((String) arg1);
            }
            catch (ParseException e)
            {
               return null;
            }
         }
      }, Date.class);

      System.out.println(ConvertUtils
            .convert("2016-04-09 12:41:00", Date.class));
   }
}

(4) . 运行结果

Sat Apr 09 12:41:00 CST 2016