您的位置:首页 > 其它

commons-beanutils使用介绍

2017-06-03 08:46 411 查看
        commons-beanutils是Apache开源组织提供的用于操作JAVA BEAN的工具包。使用commons-beanutils,我们可以很方便的对Bean对象的属性进行操作。今天为大家介绍一下该包的常用方法。

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

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);
}
}


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)如果是简单数据类型则返回对应的包装类,否则返回本身
       使用示例:
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);
}
}

运行结果:
{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)执行构造方法
       
        使用示例:

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);
}
}

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


PropertyUtils

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

        方法摘要:
     
返回值方法名说明
static voidaddBeanIntrospector(BeanIntrospector introspector)添加一个BeanIntrospector
static 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)移除BeanIntrospector
static voidresetBeanIntrospectors()重置BeanIntrospector
static 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)设置属性值
        使用示例:
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);
}
}

输出:
{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)设置属性值
         使用示例:
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);
}
}
输出结果:
{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)注册转换器
      使用示例:
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));
}
}
运行结果:
Sat Apr 09 12:41:00 CST 2016
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: