commons-beanutils使用介绍
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使用介绍的更多相关文章
- Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
Apache Commons Beanutils为开源软件,可在Apache官网http://commons.apache.org/proper/commons-beanutils/download_ ...
- Apache Commons 工具类介绍及简单使用
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- Apache Commons Beanutils 三 (BeanUtils、ConvertUtils、CollectionUtils...)
前言 前面已经学习了Apache Commons Beanutils包里的PropertyUtils和动态bean,接下来将学习剩下的几个工具类,个人觉得还是非常实用的,特别是CollectionUt ...
- Apache Commons Beanutils 二 (动态Bean - DynaBeans)
相关背景 上一篇介绍了PropertyUtils的用法,PropertyUtils主要是在不修改bean结构的前提下,动态访问bean的属性: 但是有时候,我们会经常希望能够在不定义一个Java类的前 ...
- Apache Commons Beanutils 一 (使用PropertyUtils访问Bean属性)
BeanUtils简要描述 beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值.动态定义和访问bean属性: 细心的话,会发 ...
- Apache Commons 工具集介绍
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- Apache Commons 工具类介绍及简单使用(转载)
原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...
- Java:Apache Commons 工具类介绍及简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...
- Apache Commons BeanUtils
http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanut ...
- myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入
com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import or ...
随机推荐
- vue:自定义指令
<div id="app"> <div v-lang="color">{{num}}</div> <button @c ...
- centos7 安装zabbix
一.安装mysql 1.[root@iZ28gvqe4biZ ~]# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.n ...
- 每日linux命令学习-历史指令查询(history、fc、alias)
linux历史机制对命令行中输入的命令进行编号并依此保存,以维护命令历史.登录会话期间输入的命令保存在shell内存中,若终止命令则添加至历史文件. 1. 箭头符号方向键 使用键盘上的箭头方向键可以从 ...
- java提供的线程池的使用
应用场景,比如你有个业务模块,非常耗时,并且还需要重复调用5次. 如果你写个for循环调用5次,调用一次3秒,那么5次就15秒,不是很友好. 这时,如果你用线程池就方便了,多线程跑,都跑完,收集到结果 ...
- linux时间修改-hwclock和date
修改系统时间date 设定日期:date -s 月/日/年,例如设定日期为2018年12月1日,date -s 12/01/2018(年也可以是两位) 设定时间:date -s hh:mm:ss,例如 ...
- fjwc2019 D2T2 定价 (栈+set+贪心)
#182. 「2019冬令营提高组」定价 先瞄下数据范围 对于所有数据,1≤n≤1000,1≤m≤10^9,1≤q≤500000 .\textbf{2 操作的个数不超过 1000.} $10^9$位, ...
- TCP/IP编程——基于TCP的半关闭
在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...
- dubbo rpc调用抛出的Exception处理
关于dubbo的Exception堆栈被吃处理,网上已经有比较多的解决方法,在我们的应用场景中,不希望RPC调用对方抛出业务exception,而是通过Resp中的errorCode,errorMsg ...
- Vue 旅游网首页开发1-工具安装及码云使用
Vue 旅游网首页开发-工具安装及码云使用 环境安装 安装 node.js node.js 官网:https://nodejs.org/en/ 注册码云,创建私密仓库存储项目 码云:https://g ...
- 20145308 《网络对抗》 MSF基础应用 学习总结
20145308 <网络对抗> MSF基础应用 学习总结 实验内容 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067 ...