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

MethodUtils

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

方法摘要:

返回值 方法名 说明
static int clearCache() 清空方法缓存
static Method getAccessibleMethod(Class<?> clazz, Method method) 返回一个可访问的方法
static Method getAccessibleMethod(Class<?> clazz, String methodName, Class<?> parameterType) 返回一个可访问的方法
static Method getAccessibleMethod(Class<?> clazz, String methodName, Class<?>[] parameterTypes) 返回一个可访问的方法
static Method getAccessibleMethod(Method method) 返回一个可访问的方法
static Method getMatchingAccessibleMethod(Class<?> clazz, String methodName, Class<?>[] parameterTypes) 查找与方法名及参数匹配的可访问方法
static Class<?> getPrimitiveType(Class<?> wrapperType) 获得包装类的基本数据类型
static Class<?> getPrimitiveWrapper(Class<?> primitiveType) 获得基本数据类型的包装类型
static Object invokeExactMethod(Object object, String methodName, Object arg) 执行方法
static Object invokeExactMethod(Object object, String methodName, Object[] args) 执行方法
static Object invokeExactMethod(Object object, String methodName, Object[] args, Class<?>[] parameterTypes) 执行方法
static Object invokeExactStaticMethod(Class<?> objectClass, String methodName, Object arg) 执行静态方法
static Object invokeExactStaticMethod(Class<?> objectClass, String methodName, Object[] args) 执行静态方法
static Object invokeExactStaticMethod(Class<?> objectClass, String methodName, Object[] args, Class<?>[] parameterTypes) 执行静态方法
static Object invokeMethod(Object object, String methodName, Object arg) 执行方法
static Object invokeMethod(Object object, String methodName, Object[] args) 执行方法
static Object invokeMethod(Object object, String methodName, Object[] args, Class<?>[] parameterTypes) 执行方法
static Object invokeStaticMethod(Class<?> objectClass, String methodName, Object arg) 执行静态方法
static Object invokeStaticMethod(Class<?> objectClass, String methodName, Object[] args) 执行静态方法
static Object invokeStaticMethod(Class<?> objectClass, String methodName, Object[] args, Class<?>[] parameterTypes) 执行静态方法
static boolean isAssignmentCompatible(Class<?> parameterType, Class<?> parameterization) 确定是否可以使用一个类型作为方法调用参数
static void setCacheMethods(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);
}
}

运行结果:

{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> T invokeConstructor(Class<T> klass, Object arg) 执行构造方法
static <T> T invokeConstructor(Class<T> klass, Object[] args) 执行构造方法
static <T> T invokeConstructor(Class<T> klass, Object[] args, Class<?>[] parameterTypes) 执行构造方法
static <T> T invokeExactConstructor(Class<T> klass, Object arg) 执行构造方法
static <T> T invokeExactConstructor(Class<T> klass, Object[] args) 执行构造方法
static <T> T invokeExactConstructor(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);
}
}

运行结果:

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

PropertyUtils

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

方法摘要:

返回值 方法名 说明
static void addBeanIntrospector(BeanIntrospector introspector) 添加一个BeanIntrospector
static void clearDescriptors() 清空所有属性描述信息
static void copyProperties(Object dest, Object orig) 复制属性
static Map<String,Object> describe(Object bean) 属性描述
static Object getIndexedProperty(Object bean, String name) 指定索引属性值
static Object getIndexedProperty(Object bean, String name, int index) 指定索引属性值
static Object getMappedProperty(Object bean, String name) 获得Map属性
static Object getMappedProperty(Object bean, String name, String key) 获得Map属性中指定键对应的值
static Object getNestedProperty(Object bean, String name) 获得嵌套属性
static Object getProperty(Object bean, String name) 获得属性
static PropertyDescriptor getPropertyDescriptor(Object bean, String name) 获得属性描述
static PropertyDescriptor[] getPropertyDescriptors(Class<?> beanClass) 获得属性描述
static PropertyDescriptor[] getPropertyDescriptors(Object bean) 获得属性描述
static Class<?> getPropertyType(Object bean, String name) 获得属性类型
static Method getReadMethod(PropertyDescriptor descriptor) 返回一个可访问的属性的getter方法
static Object getSimpleProperty(Object bean, String name) 返回属性值
static Method getWriteMethod(PropertyDescriptor descriptor) 返回一个可访问的属性的setter方法
static boolean isReadable(Object bean, String name) 判断是否为可读属性
static boolean isWriteable(Object bean, String name) 判断是否为可写属性
static boolean removeBeanIntrospector(BeanIntrospector introspector) 移除BeanIntrospector
static void resetBeanIntrospectors() 重置BeanIntrospector
static void setIndexedProperty(Object bean, String name, int index, Object value) 设置指定索引属性值
static void setIndexedProperty(Object bean, String name, Object value) 设置指定索引属性值
static void setMappedProperty(Object bean, String name, Object value) 设置Map属性的值
static void setMappedProperty(Object bean, String name, String key, Object value) 设置Map属性指定键的值
static void setNestedProperty(Object bean, String name, Object value) 设置嵌套属性的值
static void setProperty(Object bean, String name, Object value) 设置属性值
static void setSimpleProperty(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);
}
}

运行结果:

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

BeanUtils

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

方法摘要:

返回值 方法名 说明
static Object cloneBean(Object bean) 克隆对象
static void copyProperties(Object dest, Object orig) 复制属性
static void copyProperty(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 String getIndexedProperty(Object bean, String name) 获取指定索引位置对象作为字符串返回
static String getIndexedProperty(Object bean, String name, int index) 获取指定索引位置对象作为字符串返回
static String getMappedProperty(Object bean, String name) 获得Map属性值作为字符串返回
static String getMappedProperty(Object bean, String name, String key) 获得Map属性中指定键的值作为字符串返回
static String getNestedProperty(Object bean, String name) 获得嵌套属性作为字符串返回
static String getProperty(Object bean, String name) 获得属性值作为字符串返回
static String getSimpleProperty(Object bean, String name) 获得属性值作为字符串返回
static void populate(Object bean, Map<String,? extends Object> properties) 将Map中的数据注入到Bean对象中
static void setProperty(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);
}
}

运行结果:

{userId:jianggujin,userName:蒋固金}

ConvertUtils

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) 将字符串转换为指定数据类型对象
static void deregister() 移除所有已经注册的转换器
static void deregister(Class<?> clazz) 移除指定类型的转换器
static Converter lookup(Class<?> clazz) 查找指定类型的转换器
static Converter lookup(Class<?> sourceType, Class<?> targetType) 查找将指定类型转换为另一种类型的转换器
static void register(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));
}
}

运行结果:

Sat Apr 09 12:41:00 CST 2016

 

commons-beanutils使用介绍的更多相关文章

  1. Apache Commons Beanutils对象属性批量复制(pseudo-singleton)

    Apache Commons Beanutils为开源软件,可在Apache官网http://commons.apache.org/proper/commons-beanutils/download_ ...

  2. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  3. Apache Commons Beanutils 三 (BeanUtils、ConvertUtils、CollectionUtils...)

    前言 前面已经学习了Apache Commons Beanutils包里的PropertyUtils和动态bean,接下来将学习剩下的几个工具类,个人觉得还是非常实用的,特别是CollectionUt ...

  4. Apache Commons Beanutils 二 (动态Bean - DynaBeans)

    相关背景 上一篇介绍了PropertyUtils的用法,PropertyUtils主要是在不修改bean结构的前提下,动态访问bean的属性: 但是有时候,我们会经常希望能够在不定义一个Java类的前 ...

  5. Apache Commons Beanutils 一 (使用PropertyUtils访问Bean属性)

    BeanUtils简要描述 beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值.动态定义和访问bean属性: 细心的话,会发 ...

  6. Apache Commons 工具集介绍

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  7. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  8. Java:Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...

  9. Apache Commons BeanUtils

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

  10. myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入

    com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import or ...

随机推荐

  1. vue:自定义指令

    <div id="app"> <div v-lang="color">{{num}}</div> <button @c ...

  2. centos7 安装zabbix

    一.安装mysql 1.[root@iZ28gvqe4biZ ~]# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.n ...

  3. 每日linux命令学习-历史指令查询(history、fc、alias)

    linux历史机制对命令行中输入的命令进行编号并依此保存,以维护命令历史.登录会话期间输入的命令保存在shell内存中,若终止命令则添加至历史文件. 1. 箭头符号方向键 使用键盘上的箭头方向键可以从 ...

  4. java提供的线程池的使用

    应用场景,比如你有个业务模块,非常耗时,并且还需要重复调用5次. 如果你写个for循环调用5次,调用一次3秒,那么5次就15秒,不是很友好. 这时,如果你用线程池就方便了,多线程跑,都跑完,收集到结果 ...

  5. linux时间修改-hwclock和date

    修改系统时间date 设定日期:date -s 月/日/年,例如设定日期为2018年12月1日,date -s 12/01/2018(年也可以是两位) 设定时间:date -s hh:mm:ss,例如 ...

  6. fjwc2019 D2T2 定价 (栈+set+贪心)

    #182. 「2019冬令营提高组」定价 先瞄下数据范围 对于所有数据,1≤n≤1000,1≤m≤10^9,1≤q≤500000 .\textbf{2 操作的个数不超过 1000.} $10^9$位, ...

  7. TCP/IP编程——基于TCP的半关闭

    在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...

  8. dubbo rpc调用抛出的Exception处理

    关于dubbo的Exception堆栈被吃处理,网上已经有比较多的解决方法,在我们的应用场景中,不希望RPC调用对方抛出业务exception,而是通过Resp中的errorCode,errorMsg ...

  9. Vue 旅游网首页开发1-工具安装及码云使用

    Vue 旅游网首页开发-工具安装及码云使用 环境安装 安装 node.js node.js 官网:https://nodejs.org/en/ 注册码云,创建私密仓库存储项目 码云:https://g ...

  10. 20145308 《网络对抗》 MSF基础应用 学习总结

    20145308 <网络对抗> MSF基础应用 学习总结 实验内容 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067 ...