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

2022-09-13 13:19:53

 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 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)设置属性值

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

  • 作者:努力的老二
  • 原文链接:https://blog.csdn.net/sky1988818/article/details/86593724
    更新时间:2022-09-13 13:19:53