Apache-common提高你编程能力的利器-commons-beanutils

 1 概述

   大多数Java开发人员习惯于创建符合属性getter和setter的JavaBeans命名模式的Java类。通过调用getXxx和setXxx方法获取java内部属性  。但是,在某些情况下,需要动态访问Java对象属性,此时就需使用反射或者内省机制,在运行时获取类信息,针对beanutils的使用场景如下:

  • 构建与Java对象模型(例如Bean Scripting Framework)交互的脚本语言。
  • 构建用于Web演示和类似用途的模板语言处理器(例如JSP或Velocity)。
  • 为JSP和XSP环境构建自定义标记库(例如Jakarta Taglibs,Struts,Cocoon)。
  • 使用基于XML的配置资源(例如Ant构建脚本,Web应用程序部署描述符,Tomcat的server.xml 文件)。

  Java语言提供了反射和内省的机制,来弥补java的动态性,(具体请参考java.lang.reflect和java.beans包)。但是,这些API可能非常复杂,无法便捷的使用,该 BeanUtils的组件提供围绕这些功能易于使用的包装,总结起来就是beanutils包作为工具类利用反射和内省的原理,可以简化javabean的动态操作。

 2 依赖模块

    BeanUtils的1.7.x和1.8.x版本分发了三个版本:

  • commons-beanutils.jar - 包含所有内容
  • commons-beanutils-core.jar - 排除Bean Collections类
  • commons-beanutils-bean-collections.jar - 仅限Bean Collections类

但是最新版本1.9.x的jar已经进行了合并,只对外提供一个jar。

 3 核心子包

Commons BeanUtils一共包括如下5个包:

  • org.apache.commons.beanutils – 核心包,定义一组工具类和需要用到的接口规范。

     核心接口5个:

     

   其中Converter是所有转化器的顶层接口,BeanInstrospector和InstrospectionContext主要负责内省相关,DynaBean和DynaClass是所有动态操作的接口。除此之外还有一个队属性抽象的接口DynaProperty。

  • org.apache.commons.beanutils.converters – 转换String到需要类型的类,实现Converter接口
  • org.apache.commons.beanutils.locale – beanutils的本地化操作
  • org.apache.commons.beanutils.locale.converters – converters的locale本地化操作,主要针对基本数据类型,还包括时间的本地化操作等
  • org.apache.commons.beantuils.expression – 使用到的Collection类

 

   后三个包主要是用于数据的转换,围绕着一个 Converter 接口,该接口只有一个方法:java.lang.Object convert(java.lang.Class type, java.lang.Object value) ,用于将一个 value 转换成另一个类型为 type 的 Object。在将字符串类型的数据转换成日期类型时会使用此方法。
 

方法摘要:

返回值 方法名 说明
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) 设置属性值

 

与之相关联的还有MethodUtils,ConstructorUtils,PropertyUtils,主要是为了简化反射的操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章