Jar包commons-beanutils使用介绍

来源:互联网 发布:女变男网络电影 编辑:程序博客网 时间:2024/05/30 02:25

原文地址:http://blog.csdn.net/jianggujin/article/details/51104949

commons-beanutils是Apache开源组织提供的用于操作Java BEAN的工具包。使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作。今天为大家介绍一下该包的常用方法。

在介绍常用类之前,我们先来 编写一个用于测试的BEAN类:

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

MethodUtils

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

方法摘要:

返回值方法名说明static intclearCache()清空方法缓存static MethodgetAccessibleMethod(Class<?> clazz, Method method)返回一个可访问的方法static MethodgetAccessibleMethod(Class<?> clazz, String methodName, Class<?> parameterType)返回一个可访问的方法static MethodgetAccessibleMethod(Class<?> clazz, String methodName, Class<?>[] parameterTypes)返回一个可访问的方法static MethodgetAccessibleMethod(Method method)返回一个可访问的方法static MethodgetMatchingAccessibleMethod(Class<?> clazz, String methodName, Class<?>[] parameterTypes)查找与方法名及参数匹配的可访问方法static Class<?>getPrimitiveType(Class<?> wrapperType)获得包装类的基本数据类型static Class<?>getPrimitiveWrapper(Class<?> primitiveType)获得基本数据类型的包装类型static ObjectinvokeExactMethod(Object object, String methodName, Object arg)执行方法static ObjectinvokeExactMethod(Object object, String methodName, Object[] args)执行方法static ObjectinvokeExactMethod(Object object, String methodName, Object[] args, Class<?>[] parameterTypes)执行方法static ObjectinvokeExactStaticMethod(Class<?> objectClass, String methodName, Object arg)执行静态方法static ObjectinvokeExactStaticMethod(Class<?> objectClass, String methodName, Object[] args)执行静态方法static ObjectinvokeExactStaticMethod(Class<?> objectClass, String methodName, Object[] args, Class<?>[] parameterTypes)执行静态方法static ObjectinvokeMethod(Object object, String methodName, Object arg)执行方法static ObjectinvokeMethod(Object object, String methodName, Object[] args)执行方法static ObjectinvokeMethod(Object object, String methodName, Object[] args, Class<?>[] parameterTypes)执行方法static ObjectinvokeStaticMethod(Class<?> objectClass, String methodName, Object arg)执行静态方法static ObjectinvokeStaticMethod(Class<?> objectClass, String methodName, Object[] args)执行静态方法static ObjectinvokeStaticMethod(Class<?> objectClass, String methodName, Object[] args, Class<?>[] parameterTypes)执行静态方法static booleanisAssignmentCompatible(Class<?> parameterType, Class<?> parameterization)确定是否可以使用一个类型作为方法调用参数static voidsetCacheMethods(boolean cacheMethods)设置缓存方法static Class<?>toNonPrimitiveClass(Class<?> clazz)如果是简单数据类型则返回对应的包装类,否则返回本身

使用示例:

package com.gujin.beanutils;import java.lang.reflect.Method;import org.apache.commons.beanutils.MethodUtils;import org.junit.Test;import com.gujin.entity.UserInfo;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, "jianggujin");      // 可以直接通过invokeMethod执行方法      MethodUtils.invokeMethod(userInfo, "setUserName", "蒋固金");      System.out.println(userInfo);   }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

运行结果:

{userId:jianggujin,userName:蒋固金}

ConstructorUtils

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

方法摘要:

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

使用示例:

package com.gujin.beanutils;import java.lang.reflect.Constructor;import org.apache.commons.beanutils.ConstructorUtils;import org.junit.Test;import com.gujin.entity.UserInfo;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("jianggujin", "蒋固金"));      // 更简洁的写法      UserInfo userInfo = ConstructorUtils.invokeConstructor(UserInfo.class,            new String[] { "jianggujin", "蒋固金" });      System.out.println(userInfo);   }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

运行结果:

{userId:jianggujin,userName:蒋固金} 
{userId:jianggujin,userName:蒋固金}

PropertyUtils

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

方法摘要:

返回值方法名说明static voidaddBeanIntrospector(BeanIntrospector introspector)添加一个BeanIntrospectorstatic voidclearDescriptors()清空所有属性描述信息static voidcopyProperties(Object dest, Object orig)复制属性static Map<String,Object>describe(Object bean)属性描述static ObjectgetIndexedProperty(Object bean, String name)指定索引属性值static ObjectgetIndexedProperty(Object bean, String name, int index)指定索引属性值static ObjectgetMappedProperty(Object bean, String name)获得Map属性static ObjectgetMappedProperty(Object bean, String name, String key)获得Map属性中指定键对应的值static ObjectgetNestedProperty(Object bean, String name)获得嵌套属性static ObjectgetProperty(Object bean, String name)获得属性static PropertyDescriptorgetPropertyDescriptor(Object bean, String name)获得属性描述static PropertyDescriptor[]getPropertyDescriptors(Class<?> beanClass)获得属性描述static PropertyDescriptor[]getPropertyDescriptors(Object bean)获得属性描述static Class<?>getPropertyType(Object bean, String name)获得属性类型static MethodgetReadMethod(PropertyDescriptor descriptor)返回一个可访问的属性的getter方法static ObjectgetSimpleProperty(Object bean, String name)返回属性值static MethodgetWriteMethod(PropertyDescriptor descriptor)返回一个可访问的属性的setter方法static booleanisReadable(Object bean, String name)判断是否为可读属性static booleanisWriteable(Object bean, String name)判断是否为可写属性static booleanremoveBeanIntrospector(BeanIntrospector introspector)移除BeanIntrospectorstatic voidresetBeanIntrospectors()重置BeanIntrospectorstatic voidsetIndexedProperty(Object bean, String name, int index, Object value)设置指定索引属性值static voidsetIndexedProperty(Object bean, String name, Object value)设置指定索引属性值static voidsetMappedProperty(Object bean, String name, Object value)设置Map属性的值static voidsetMappedProperty(Object bean, String name, String key, Object value)设置Map属性指定键的值static voidsetNestedProperty(Object bean, String name, Object value)设置嵌套属性的值static voidsetProperty(Object bean, String name, Object value)设置属性值static voidsetSimpleProperty(Object bean, String name, Object value)设置属性值

使用示例:

package com.gujin.beanutils;import org.apache.commons.beanutils.PropertyUtils;import org.junit.Test;import com.gujin.entity.UserInfo;public class PropertyUtilsTest{   @Test   public void test() throws Exception   {      UserInfo userInfo = new UserInfo("jianggujin", "蒋固金");      UserInfo copyed = new UserInfo();      PropertyUtils.copyProperties(copyed, userInfo);      System.out.println(copyed);      System.out.println(PropertyUtils.describe(userInfo));      PropertyUtils.setProperty(userInfo, "userId", "gjjiang");      System.out.println(userInfo);   }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

运行结果:

{userId:jianggujin,userName:蒋固金} 
{userId=jianggujin, class=class com.gujin.entity.UserInfo, userName=蒋固金} 
{userId:gjjiang,userName:蒋固金}

BeanUtils

BeanUtils通过反射提供了Bean对象的便捷操作方法。

方法摘要:

返回值方法名说明static ObjectcloneBean(Object bean)克隆对象static voidcopyProperties(Object dest, Object orig)复制属性static voidcopyProperty(Object bean, String name, Object value)复制属性static <K,V> Map<K,V>createCache()创建缓存static Map<String,String>describe(Object bean)描述static String[]getArrayProperty(Object bean, String name)返回指定属性的值,作为字符串数组返回static StringgetIndexedProperty(Object bean, String name)获取指定索引位置对象作为字符串返回static StringgetIndexedProperty(Object bean, String name, int index)获取指定索引位置对象作为字符串返回static StringgetMappedProperty(Object bean, String name)获得Map属性值作为字符串返回static StringgetMappedProperty(Object bean, String name, String key)获得Map属性中指定键的值作为字符串返回static StringgetNestedProperty(Object bean, String name)获得嵌套属性作为字符串返回static StringgetProperty(Object bean, String name)获得属性值作为字符串返回static StringgetSimpleProperty(Object bean, String name)获得属性值作为字符串返回static voidpopulate(Object bean, Map<String,? extends Object> properties)将Map中的数据注入到Bean对象中static voidsetProperty(Object bean, String name, Object value)设置属性值

使用示例:

package com.gujin.beanutils;import java.util.HashMap;import org.apache.commons.beanutils.BeanUtils;import org.junit.Test;import com.gujin.entity.UserInfo;public class BeanUtilsTest{   @Test   public void test() throws Exception   {      UserInfo userInfo = new UserInfo();      HashMap<String, String> properties = new HashMap<String, String>();      properties.put("userId", "jianggujin");      properties.put("userName", "蒋固金");      BeanUtils.populate(userInfo, properties);      System.out.println(userInfo);   }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

运行结果:

{userId:jianggujin,userName:蒋固金}

ConvertUtils

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

方法摘要: 
方法摘要:

返回值方法名说明static Stringconvert(Object value)将对象转换为字符串static Objectconvert(Object value, Class<?> targetType)将对象转换为指定数据类型对象static Objectconvert(String[] values, Class<?> clazz)将数组转换为指定数据类型对象static Objectconvert(String value, Class<?> clazz)将字符串转换为指定数据类型对象static voidderegister()移除所有已经注册的转换器static voidderegister(Class<?> clazz)移除指定类型的转换器static Converterlookup(Class<?> clazz)查找指定类型的转换器static Converterlookup(Class<?> sourceType, Class<?> targetType)查找将指定类型转换为另一种类型的转换器static voidregister(Converter converter, Class<?> clazz)注册转换器

使用示例:

package com.gujin.beanutils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.commons.beanutils.ConvertUtils;import org.apache.commons.beanutils.Converter;import org.junit.Test;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));   }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

运行结果:

Sat Apr 09 12:41:00 CST 2016