原文地址: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"); 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