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


    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,你就会觉得简单清晰得多。

  • 相关阅读:
    <剑指OFFER18> 18_01_DeleteNodeInList在O(1)时间删除链表结点
    哈夫曼树

    快速排序
    冒泡算法
    Java 缓存机制
    JAVA NIO
    string、stringbuilder、stringbuffer区别
    Java内存泄露的问题调查定位
    使用hibernate 框架搭建的helloworld
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5660066.html
Copyright © 2020-2023  润新知