commons-beanutils的使用
commons-beanutils的常用功能包括类型转换和动态bean的创建。
类型转换
关于类型转换主要用到BeanUtils 和 ConvertUtils。BeanUtils的使用是大家最熟悉的了。将javax.servlet.HttpServletRequest接受的参数转换到对应到指定的JavaBean,这是Struts等许多MVC框架中的基本服务之一。
在一次HTTP请求中,请求参数值都是字符串或字符串数组,大多数值需要被转换为底层的数据类型。BeanUtils提供了属性的setter方法,以接受字符串的值,并自动把它们转换成合适的属性类型,和getter方法,当调用getter方法时,又进行一次类型转换。除此之外,populate()方法可以把一个map中的键值对转换为bean里面的属性和值。例如
HttpServletRequest request = ...;
MyBean bean = ...;
HashMap map = new HashMap();
Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
map.put(name, request.getParameterValues(name));
}
BeanUtils.populate(bean, map);
当然BeanUtils底层依赖于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) //转换字符串为一指定类型
下面举例说明(如无特别说明,下面的所有Java代码均以此xml文件为操作对象)
<?xml version="1.0" encoding="UTF-8"?>
<origin dataSource="ds">
<columns>
<column code="ID" name="" type="java.lang.Integer" length="" />
<column code="FIRSTNAME" name="" type="java.lang.String" length="" />
<column code="LASTNAME" name="" type="java.lang.String" length="" />
<column code="SEX" name="" type="java.lang.String" length="" />
</columns>
</origin>
XMLConfiguration config = new XMLConfiguration(String); //关于XML的读取在“commons-configuration的使用”中讲过
String id = config.getString("columns.column.[@code]"); //拿到第一个Column的code
String type = config.getString("columns.column.[@type]"); //拿到第一个Column的type
Object value = ConvertUtils.convert(id,Class.forName(type)); //转换了
动态Bean的创建
动态bean的创建也很简单,常用API如下
org.apache.commons.beanutils.DynaBean
org.apache.commons.beanutils.DynaClass
org.apache.commons.beanutils.BasicDynaBean //实现了DynaBean
org.apache.commons.beanutils.BasicDynaClass //实现了DynaClass
org.apache.commons.beanutils.DynaProperty
第一步,就是要创建动态class
DynaProperty[] props = new DynaProperty[]{
new DynaProperty("address", java.util.Map.class),
new DynaProperty("subordinate", mypackage.Employee[].class),
new DynaProperty("firstName", String.class),
new DynaProperty("lastName", String.class)
}; //
BasicDynaClass dynaClass = new BasicDynaClass("employee", null, props); //主要是构造props动态属性数组,名字"employee"和bean类型(这里是null)无关紧要
第二步,创建动态bean
DynaBean employee = dynaClass.newInstance();
employee.set("address", new HashMap());
employee.set("subordinate", new mypackage.Employee[0]);
employee.set("firstName", "Fred");
employee.set("lastName", "Flintstone");
现在,把xml文件中的所有column属性构造一个动态class(动态class.newInstance()就可以生成一个bean了,所以不讨论动态bean),在如下代码中originDynaClass就是生成的动态class
List<HierarchicalConfiguration> columns = (List<HierarchicalConfiguration>) config.configurationsAt("origin.bean.columns.column");
DynaProperty[] properties = new DynaProperty[columns.size()];
for (int i = 0; i < columns.size(); i++) {
HierarchicalConfiguration column = (HierarchicalConfiguration)columns.get(i);
try {
properties[i] = new DynaProperty(column.getString("[@code]"),Class.forName(column.getString("[@type]")));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
logger.error("类型转换异常", e);
}
}
BasicDynaClass originDynaClass = new BasicDynaClass ("origin", BasicDynaBean.class, properties);
分享到:
相关推荐
赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...
赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...
赠送jar包:commons-beanutils-1.9.3.jar; 赠送原API文档:commons-beanutils-1.9.3-javadoc.jar; 赠送源代码:commons-beanutils-1.9.3-sources.jar; 包含翻译后的API文档:commons-beanutils-1.9.3-javadoc-...
- `commons-beanutils-1.8.0-bin.zip`包含了`commons-beanutils-1.8.0.jar`的源码编译后的二进制文件,可以直接在项目中使用。 - `commons-beanutils-1.8.0-src.zip`提供了源代码,开发者可以查看和学习内部实现,...
- `commons-beanutils-1.8.0-sources.jar`:这个文件包含了`1.8.0`版本的源代码,对于开发者来说是极其宝贵的资源,可以通过阅读源码理解内部实现,学习如何优雅地处理Bean操作,甚至进行二次开发。 4. **使用场景...
commons-beanutils-1.8.2.jar,commons-codec-1.4.jar,commons-collections-3.2.1.jar,commons-dbcp-1.2.2.jar,commons-digester-2.0.jar,commons-fileupload-1.2.1.jar,commons-httpclient.jar,commons-io-...
在给定的压缩包文件中,包含了两个版本的Apache Commons BeanUtils库:`commons-beanutils-1.8.0`和`commons-beanutils-1.8.3`。 Apache Commons BeanUtils的核心功能包括: 1. **属性访问**:BeanUtils提供了一...
赠送jar包:commons-beanutils-1.9.1.jar; 赠送原API文档:commons-beanutils-1.9.1-javadoc.jar; 赠送源代码:commons-beanutils-1.9.1-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.1.pom; ...
在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目中集成和应用。 Apache Commons BeanUtils库的主要目标是简化JavaBean对象的属性访问。它通过提供一系列静态...
在给定的`commons-beanutils-1.9.1.jar`中,包含了大量的实用函数,如`PropertyUtils`、`MethodUtils`等,这些函数简化了JavaBeans的处理。 `commons-logging-1.1.3.jar`是另一个Apache项目,它是Java的日志抽象层...
赠送jar包:commons-beanutils-1.9.3.jar; 赠送原API文档:commons-beanutils-1.9.3-javadoc.jar; 赠送源代码:commons-beanutils-1.9.3-sources.jar; 包含翻译后的API文档:commons-beanutils-1.9.3-javadoc-...
赠送jar包:commons-beanutils-1.7.0.jar; 赠送原API文档:commons-beanutils-1.7.0-javadoc.jar; 赠送源代码:commons-beanutils-1.7.0-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.7.0.pom; ...
赠送jar包:commons-beanutils-1.7.0.jar; 赠送原API文档:commons-beanutils-1.7.0-javadoc.jar; 赠送源代码:commons-beanutils-1.7.0-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.7.0.pom; ...
在实际应用中,`commons-beanutils-1.8.3.jar`常与其他Apache Commons库(如Collections、Lang等)结合使用,以实现更强大的功能。例如,结合Commons Collections,可以方便地处理复杂的数据结构;结合Commons Lang...
例如,`commons-beanutils.jar`可以帮助开发者方便地处理对象属性,`commons-collections-3.1.jar`提供了丰富的集合操作,而`commons-pool-1.2.jar`则有助于优化对象的创建和使用,减少系统资源的消耗。在实际项目中...
2. `commons-beanutils-1.9.4-tests.jar`: 包含了BeanUtils库的测试代码,这些测试用例可以帮助开发者理解库的内部工作原理,同时也可以作为示例代码来学习如何使用BeanUtils。 3. `commons-beanutils-1.9.4-...
commons-beanutils-1.8.0 jar包: 1.commons-beanutils-1.8.0.jar 2.commons-beanutils-1.8.0-javadoc.jar 3.commons-beanutils-1.8.0-sources.jar 4.commons-beanutils-bean-collections-1.8.0.jar 5.commons-...
在`commons-beanutils.jar.zip`压缩包中,除了核心库文件外,还包含了一个`license.txt`文件,这是Apache软件基金会发布的Apache License 2.0授权协议,它规定了该库的使用、分发和修改条件,确保了开源社区的公平...
commons-beanutils-core-1.8.3.jar