Jakarta Commons项目提供了相当丰富的API,我们之前了解到的Commons Lang只是众多API的比较核心的一小部分而已。Commons下面还有相当数量的子项目,用于解决各种各样不同方向的实际问题,BeanUtils就是其中的一个,用于处理JavaBeans。它利用Java的反射机制,从动态的生成对bean的getter和setter的调用代码,到模拟创建一个动态的bean,等等。这个包看似简单,却是很多开源项目的基石:如在著名的Struts和Spring Framework中,我们都能找到BeanUtils的影子。大家猜猜看,有哪位名人是BeanUtils的作者之一?没错,就是Struts的创始人Craig McClanahan

BeanUtils最核心的好处在于:我们在编码时,并不需要知道我们处理的JavaBeans具体是什么类型,有哪些属性,这些信息是可以动态获取的,甚至我们都可以不必去关心事实上是否存在这样一个具体的JavaBean类。我们只需要知道有一个JavaBean的实例,我们需要从中取得某个属性,设定某个属性的值,或者仅仅是需要一个属性表。要做到这些,依靠Sun提供的JavaBean规范似乎找不到一个很直接的方式,除非硬编码,将getXxxx()和setXxxx()直接写进我们的程序。但是这样就大大增加了代码的复杂度、耦合性和维护成本。还好Commons BeanUtils对这个问题提供了一种优雅的解决方案。

我们有两种途径获取Commons BeanUtils的binary:

1- 从Struts、Spring或者任何依赖BeanUtils的开源产品的发行包中找到相应的jar文件;

2- 从http://www.apache.org/dist/jakarta/commons/beanutils/binaries/下载。

Commons BeanUtils的源码下载地址:

http://www.apache.org/dist/jakarta/commons/beanutils/source/

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

  • org.apache.commons.beanutils – 核心包,定义一组Utils类和需要用到的接口规范
  • org.apache.commons.beanutils.converters – 转换String到需要类型的类,实现Converter接口
  • org.apache.commons.beanutils.locale – beanutils的locale敏感版本
  • org.apache.commons.beanutils.locale.converters – converters的locale敏感版本
  • org.apache.commons.collections – beanutils使用到的Collection类

其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。接下来我们就仔细看一看这个包都有些什么东东:

[4个接口]

Converter

该接口定义了如下方法:

public java.lang.Object convert(java.lang.Class type, java.lang.Object value);

只要实现了这个Converter接口并注册到ConvertUtils类即可被我们的BeanUtils包所使用,它的主要目的是提供将给定的Object实例转换为目标类型的算法。我们可以在beanutils.converters包中找到相当多的已经实现的转换器。

DynaBean

该接口定义的是一个动态的JavaBean,它的属性类型、名称和值都是可以动态改变的。

DynaClass

该接口定义的是针对实现了DynaBean接口的类的java.lang.Class对象,提供如getName()、newInstance()等方法。

MutableDynaClass

该接口是对DynaClass的扩展,使得动态bean的属性可以动态增加或删除。

[24个类]

BasicDynaBean

DynaBean接口的最精简实现

BasicDynaClass

DynaClass接口的最精简实现

BeanUtils

提供通过反射机制填写JavaBeans属性的工具/静态方法

BeanUtilsBean

BeanUtils类的实例化实现,区别于BeanUtils的静态方法方式,使得自定义的配置得以保持

ConstructorUtils

同MethodUtils类似,不过专注于构造方法

ContextClassLoaderLocal

针对每个classloader的唯一标识

ConvertingWrapDynaBean

包含了标准JavaBean实例的DynaBean实现,使得我们可以使用DynaBean的API来访问起属性,同时提供设定属性时的类型转换,继承自并区别于WrapDynaBean

ConvertUtils

提供工具/静态方法,用于将String对象及其数组转换为指定的类型的对象及其数组。

ConvertUtilsBean

ConvertUtils类的实例化实现,区别于ConvertUtils的静态方法方式,使得自定义的配置得以保持

DynaProperty

用于描述DynaBean的属性

JDBCDynaClass

为DynaClass的JDBC实现提供公用的逻辑

LazyDynaBean

懒载入DynaBean,自动往DynaClass添加属性并提供懒载入List和懒载入Map的功能

LazyDynaClass

实现MutableDynaClass接口的类

LazyDynaMap

为Map实例提供一个轻量级的DynaBean包装

MappedPropertyDescriptor

用于描述映射的属性

MethodUtils

包含了针对一般意义上的方法而非特定属性的反射工具/静态方法

MethodUtils.MethodDescriptor

描述通过反射查找某个方法所使用的键值

PropertyUtils

提供利用Java反射API调用具体对象的getter和setter的工具/静态方法

PropertyUtilsBean

PropertyUtils类的实例化实现,区别于PropertyUtils的静态方法方式,使得自定义的配置得以保持

ResultSetDynaClass

包装java.sql.ResultSet中的java.sql.Row实例的DynaBean所对应的DynaClass实现

ResultSetIterator

针对ResultSetDynaClass的java.util.Iterator实现

RowSetDynaClass

DynaClass的一种实现,用于在内存中创建一组表示SQL查询结果的DynaBeans,区别于ResultSetDynaClass,它不需要保持ResultSet打开

WrapDynaBean

DynaBean的一种实现,包含一个标准的JavaBean实例,以便我们可以使用DynaBean的API去访问它的属性,区别于ConvertingWrapDynaBean,它不做专门的类型转换

WrapDynaClass

DynaClass的一种实现,针对那些包装标准JavaBean实例的DynaBeans

[3Exception]

(略)

看到这么多东西是不是有点头晕?不要慌,看几个例子就明白了。只要把握好BeanUtils本身要完成的事,就不难理解这些类存在的道理。我们不妨把BeanUtils的基础应用分解成:访问JavaBean的属性、设定JavaBean的属性、以及创建和使用DynaBeans。这样来看BeanUtils,你就会觉得简单清晰得多。

BeanUtils接口和类

 

Jakarta Commons项目提供了相当丰富的API,我们之前了解到的Commons Lang只是众多API的比较核心的一小部分而已。Commons下面还有相当数量的子项目,用于解决各种各样不同方向的实际问题,BeanUtils就是其中的一个,用于处理JavaBeans。它利用Java的反射机制,从动态的生成对bean的getter和setter的调用代码,到模拟创建一个动态的bean,等等。这个包看似简单,却是很多开源项目的基石:如在著名的Struts和Spring Framework中,我们都能找到BeanUtils的影子。大家猜猜看,有哪位名人是BeanUtils的作者之一?没错,就是Struts的创始人Craig McClanahan。

BeanUtils最核心的好处在于:我们在编码时,并不需要知道我们处理的JavaBeans具体是什么类型,有哪些属性,这些信息是可以动态获取的,甚至我们都可以不必去关心事实上是否存在这样一个具体的JavaBean类。我们只需要知道有一个JavaBean的实例,我们需要从中取得某个属性,设定某个属性的值,或者仅仅是需要一个属性表。要做到这些,依靠Sun提供的JavaBean规范似乎找不到一个很直接的方式,除非硬编码,将getXxxx()和setXxxx()直接写进我们的程序。但是这样就大大增加了代码的复杂度、耦合性和维护成本。还好Commons BeanUtils对这个问题提供了一种优雅的解决方案。

我们有两种途径获取Commons BeanUtils的binary:

1- 从Struts、Spring或者任何依赖BeanUtils的开源产品的发行包中找到相应的jar文件;

2- 从http://www.apache.org/dist/jakarta/commons/beanutils/binaries/下载。

Commons BeanUtils的源码下载地址:

http://www.apache.org/dist/jakarta/commons/beanutils/source/

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

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

org.apache.commons.beanutils.converters – 转换String到需要类型的类,实现Converter接口

org.apache.commons.beanutils.locale – beanutils的locale敏感版本

org.apache.commons.beanutils.locale.converters – converters的locale敏感版本

org.apache.commons.collections – beanutils使用到的Collection类

其中需要我们特别关注的是这个org.apache.commons.beanutils包,其他包都是起辅助作用的。接下来我们就仔细看一看这个包都有些什么东东:

[4个接口]

Converter

该接口定义了如下方法:

public java.lang.Object convert(java.lang.Class type, java.lang.Object value);

只要实现了这个Converter接口并注册到ConvertUtils类即可被我们的BeanUtils包所使用,它的主要目的是提供将给定的Object实例转换为目标类型的算法。我们可以在beanutils.converters包中找到相当多的已经实现的转换器。

DynaBean

该接口定义的是一个动态的JavaBean,它的属性类型、名称和值都是可以动态改变的。

DynaClass

该接口定义的是针对实现了DynaBean接口的类的java.lang.Class对象,提供如getName()、newInstance()等方法。

MutableDynaClass

该接口是对DynaClass的扩展,使得动态bean的属性可以动态增加或删除。

[24个类]

BasicDynaBean

DynaBean接口的最精简实现

BasicDynaClass

DynaClass接口的最精简实现

BeanUtils

提供通过反射机制填写JavaBeans属性的工具/静态方法

BeanUtilsBean

BeanUtils类的实例化实现,区别于BeanUtils的静态方法方式,使得自定义的配置得以保持

ConstructorUtils

同MethodUtils类似,不过专注于构造方法

ContextClassLoaderLocal

针对每个classloader的唯一标识

ConvertingWrapDynaBean

包含了标准JavaBean实例的DynaBean实现,使得我们可以使用DynaBean的API来访问起属性,同时提供设定属性时的类型转换,继承自并区别于WrapDynaBean

ConvertUtils

提供工具/静态方法,用于将String对象及其数组转换为指定的类型的对象及其数组。

ConvertUtilsBean

ConvertUtils类的实例化实现,区别于ConvertUtils的静态方法方式,使得自定义的配置得以保持

DynaProperty

用于描述DynaBean的属性

JDBCDynaClass

为DynaClass的JDBC实现提供公用的逻辑

LazyDynaBean

懒载入DynaBean,自动往DynaClass添加属性并提供懒载入List和懒载入Map的功能

LazyDynaClass

实现MutableDynaClass接口的类

LazyDynaMap

为Map实例提供一个轻量级的DynaBean包装

MappedPropertyDescriptor

用于描述映射的属性

MethodUtils

包含了针对一般意义上的方法而非特定属性的反射工具/静态方法

MethodUtils.MethodDescriptor

描述通过反射查找某个方法所使用的键值

PropertyUtils

提供利用Java反射API调用具体对象的getter和setter的工具/静态方法

PropertyUtilsBean

PropertyUtils类的实例化实现,区别于PropertyUtils的静态方法方式,使得自定义的配置得以保持

ResultSetDynaClass

包装java.sql.ResultSet中的java.sql.Row实例的DynaBean所对应的DynaClass实现

ResultSetIterator

针对ResultSetDynaClass的java.util.Iterator实现

RowSetDynaClass

DynaClass的一种实现,用于在内存中创建一组表示SQL查询结果的DynaBeans,区别于ResultSetDynaClass,它不需要保持ResultSet打开

WrapDynaBean

DynaBean的一种实现,包含一个标准的JavaBean实例,以便我们可以使用DynaBean的API去访问它的属性,区别于ConvertingWrapDynaBean,它不做专门的类型转换

WrapDynaClass

DynaClass的一种实现,针对那些包装标准JavaBean实例的DynaBeans

[3Exception]

(略)

看到这么多东西是不是有点头晕?不要慌,看几个例子就明白了。只要把握好BeanUtils本身要完成的事,就不难理解这些类存在的道理。我们不妨把BeanUtils的基础应用分解成:访问JavaBean的属性、设定JavaBean的属性、以及创建和使用DynaBeans。这样来看BeanUtils,你就会觉得简单清晰得多。

BeanUtils接口和类的更多相关文章

  1. (转)beanUtil接口和类(有空的时候去看,到时候删除这个说明)

    Jakarta Commons项目提供了相当丰富的API,我们之前了解到的Commons Lang只是众多API的比较核心的一小部分而已.Commons下面还有相当数量的子项目,用于解决各种各样不同方 ...

  2. Myeclipse中打开接口实现类的快捷键

    Myeclipse中打开接口实现类的快捷键-----Ctrl + T Myeclipse中 Open Type快捷键-----Ctrl + Shift + T

  3. IDE:Eclipse查看接口实现类快捷键

    1.打开接口类 2.双击接口名选中 3.Ctrl+T,打开接口实现类

  4. Servlet API遍程常用接口和类

    本文主要总结Servlet  API遍程常用接口和类 Servlet API http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html ...

  5. Spring常用的接口和类(三)

    一.CustomEditorConfigurer类 CustomEditorConfigurer可以读取实现java.beans.PropertyEditor接口的类,将字符串转为指定的类型.更方便的 ...

  6. Spring常用的接口和类(二)

    七.BeanPostProcessor接口 当需要对受管bean进行预处理时,可以新建一个实现BeanPostProcessor接口的类,并将该类配置到Spring容器中. 实现BeanPostPro ...

  7. Spring常用的接口和类(一)

    一.ApplicationContextAware接口 当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口.代码展示如下: p ...

  8. C#控制台基础 函数的参数是接口 实现接口的类都可以作为参数,很好用

    镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1.代 ...

  9. JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)

    Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...

随机推荐

  1. Java 获取class method parameter name

    package org.rx.util; import org.objectweb.asm.*; import java.io.IOException; import java.io.InputStr ...

  2. Spring源码学习(3)—— 自定义标签

    上一篇讲了Spring对默认标签的解析,Spring提供了很多属性,可以供开发者根据不同情况使用.绝大多数情况下,这些功能就已经足够了.但是,当用户有更特殊的需求,又或者很多公司自己实现的服务治理框架 ...

  3. Python基础05_str_补充

    继续学习中, 补充一些str 的索引.切片.长度.循环输出等. #!/usr/bin/env python # coding:utf-8 # 通过下标索引获取字符串中的某个字符 # 1. 索引 tes ...

  4. Shell 变量替换及测试

    声明:$ 后面跟linux可执行命令 一.变量替换                   语法                      说明 ${变量名#匹配规则} 从变量的开头进行规则匹配,将符合最 ...

  5. elasticsearch 使用快照进行备份

    Elasticsearch也提供了备份集群中索引数据的策略——snapshot API.它会备份整个集群的当前状态和数据,并保存到集群中各个节点共享的仓库中.这个备份的进程是增量备份的,在第一次备份的 ...

  6. VBA定时执行某程序

    OnTime 方法参阅应用于示例特性安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后). expression.OnTime(EarliestTime, Pro ...

  7. python实现简单的定时任务

    1.首先安装 schedule 模块 命令行安装 pip install schedule pyCharm编辑器安装 File->setting->project:youProject-& ...

  8. IC卡_状态码SW1、SW2

    9000 正常 成功执行 61xx 正常 需要发GET RESPONSE命令 6200 警告 信息未提供 6281 警告 回送数据可能出错 6282 警告 文件长度小于Le 6283 警告 选中的文件 ...

  9. 着色器语言 GLSL (opengl-shader-language)入门大全

    基本类型: 类型 说明 void 空类型,即不返回任何值 bool 布尔类型 true,false int 带符号的整数 signed integer float 带符号的浮点数 floating s ...

  10. Ubuntu16.04中pip无法更新升级,采用源码方式安装

    1.从pip官网下载最新版 https://pypi.org/project/pip/#files 2.ubuntu中创建文件位置,我的放在一下路径,之后进行解压 3.解压后进入pip的文件夹,在执行 ...