`

[Jakarta Commons笔记] Commons BeanUtils

阅读更多

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

 

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

 

我们有两种途径获取Commons BeanUtilsbinary

1- StrutsSpring或者任何依赖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 – beanutilslocale敏感版本

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

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实现,使得我们可以使用DynaBeanAPI来访问起属性,同时提供设定属性时的类型转换,继承自并区别于WrapDynaBean

 

ConvertUtils

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

 

ConvertUtilsBean

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

 

DynaProperty

用于描述DynaBean的属性

 

JDBCDynaClass

DynaClassJDBC实现提供公用的逻辑

 

LazyDynaBean

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

 

LazyDynaClass

实现MutableDynaClass接口的类

 

LazyDynaMap

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

 

MappedPropertyDescriptor

用于描述映射的属性

 

MethodUtils

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

 

MethodUtils.MethodDescriptor

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

 

PropertyUtils

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

 

PropertyUtilsBean

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

 

ResultSetDynaClass

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

 

ResultSetIterator

针对ResultSetDynaClassjava.util.Iterator实现

 

RowSetDynaClass

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

 

WrapDynaBean

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

 

WrapDynaClass

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

 

[3Exception]

 

(略)

 

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

 

// 例子将在下一节单独放出。

 

分享到:
评论

相关推荐

    [Jakarta Commons笔记]

    【Jakarta Commons笔记】 Jakarta Commons是Apache软件基金会的一个项目集合,它提供了许多Java开发中常用的工具类和组件。这个项目旨在减少重复的工作,通过共享和重用代码,提高开发效率。Jakarta Commons包含了...

    jakarta commons cookbook 电子版

    《Jakarta Commons Cookbook》是Java开发领域中一本非常实用的指南,主要涵盖了Apache Jakarta Commons组件的使用技巧和最佳实践。这本书旨在帮助开发者更好地理解和利用Jakarta Commons库中的各种工具类和模块,...

    Jakarta Commons cookbook.chm与中文版的笔记

    《Jakarta Commons Cookbook》是Java开发者的一本重要参考资料,它主要涵盖了Apache Jakarta Commons项目中的各种组件和工具的使用方法。Apache Commons是Java开发中的一个关键部分,提供了许多实用且功能强大的类库...

    Apache Jakarta Commons 使用手册

    ### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...

    jakarta-commons 相关依赖包

    jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...

    jakarta commons cookbook.zip

    在Java开发中,Jakarta Commons库提供了许多子项目,如IO、Lang、BeanUtils、Collections、Codec等,每个子项目都专注于特定的领域,如输入/输出操作、字符串处理、对象的创建和复制、集合的扩展以及编码解码等。...

    JakartaCommons 详细教程更助于你的基础

    3. Jakarta Commons BeanUtils Commons BeanUtils库提供了一种简化Java Bean属性操作的方法。它包含以下组件: - BeanUtils:提供对Bean属性进行读取和设置的方法。 - BeanUtilsBean:底层支持Bean操作的工具类。 -...

    Jakarta Commons使用

    除了上述组件外,Jakarta Commons 还包括 BeanUtils、Codec、 Digester 等,它们提供了诸如对象属性映射、编码解码、XML 解析等功能,大大简化了 Java 开发中的常见任务。 通过了解和使用 Jakarta Commons,开发者...

    jakarta commons-API

    **Jakarta Commons API** 是一个Java开发人员广泛使用的开源库集合,它包含了多个模块,每个模块专注于特定的编程任务,从而简化了Java应用程序的开发。Jakarta Commons是Apache软件基金会的一个项目,它提供了大量...

    Jakarta Commons Online Bookshelf

    《Jakarta Commons在线书架》一书深入探讨了Jakarta Commons框架的核心概念与应用实践,为读者提供了一次全面理解并掌握Jakarta Commons组件的机会。本书由Vikram Goyal编写,版权归属Manning Publications,出版于...

    JAKARTA COMMONS

    2. **Commons BeanUtils**: 这个库是对 Java 反射和 introspection API 的封装,简化了对 Java 对象属性的操作,如设置和获取属性值,以及进行深度复制等。 3. **Commons Betwixt**: 用于将 JavaBean 映射到 XML ...

    Jakarta Commons

    **Jakarta Commons 知识点详解** Jakarta Commons 是 Apache 软件基金会的一个项目集合,它提供了大量的可重用 Java 类库,旨在简化开发人员的工作。这些类库覆盖了从文件上传、缓存处理到网络通信等多个领域,极大...

    介绍Jakarta Commons的烹饪书

    1. **IoC(Inversion of Control)依赖注入**:Jakarta Commons包含BeanUtils模块,提供了一种方便的JavaBean操作方式,实现了依赖注入,使得组件间的耦合度降低,提高了代码的可测试性和可维护性。 2. **...

    Jakarta commons docs API CHM 格式

    commons-beanutils 提供对 Java 反射和自省API的包装 commons-betwixt 这个组件提供一个XML自省(introspection)机制用来把Java Bean映射到XML文档 commons-chain 提供实现组织复杂的处理流程的“责任链模式” ...

    Jakarta Commons Cookbook(CHM)

    5. **BeanUtils**: Commons BeanUtils 提供了基于JavaBeans属性的工具,简化了对象之间的属性拷贝和转换。这对于处理Java对象之间的数据交互非常有用。 6. **FileUpload**: Commons FileUpload 是处理HTTP请求中的...

    json全套架包

    在使用json时所需要的架包,包括了】jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3.2.1 jakarta commons-logging 1.1.1 ezmorph 1.0.6

    commons-beanutils-1.9.2包含全部jar包源码及API文档

    Commons BeanUtils Most Java developers are used to creating Java classes that conform to the JavaBeans naming patterns for property getters and setters. It is natural to then access these methods ...

    Iverson book Apache Jakarta Commons[E文版]

    Apache Jakarta Commons是Apache软件基金会的一个项目集合,它提供了一系列实用工具类库,旨在简化Java开发。这个项目的主要目标是创建可重用的Java组件,这些组件涵盖了从数据处理到网络通信的各种领域。Iverson的...

    jakarta commons cookbook目录

    《Jakarta Commons Cookbook》是Java开发领域中一本重要的参考资料,主要涵盖了Apache Jakarta Commons项目中的各种实用工具类库的使用技巧和实践经验。这本书的核心是帮助开发者更有效地利用这些库来提高编程效率和...

    commons-beanutils-1.8.3.jar.zip

    这个库允许开发者在不改变代码的情况下切换不同的日志实现,如log4j、java.util.logging或Jakarta Commons Logging自己内置的简单日志实现。通过使用Commons Logging,应用的代码可以保持与具体日志框架无关,这样在...

Global site tag (gtag.js) - Google Analytics