`

转:DynaBean 的使用

 
阅读更多

DynaBean 的使用

       在正常的开发的过程中,我们时常会遇到这样的问题, JavaBean 的属性是不确定的、动态的,其属性的确定是由逻辑控制来处理的。比如这样的一种情况,有一组基本报表信息需要 JavaBean 来描述,这组报表在结构上具有很大的相似性,如果你不想为每一份基本报表都创建一个 JavaBean ,那么接下来为你介绍一种为 JavaBean 动态创建属性的方法。

1.   DynaBean 的创建

       为了描述的便利,我们虚拟一个简单的需求环境,就以上面提到的描述一组基本报表信息为例吧,我们假设基本报表的名称为 basicReport ,每一份基本报表都包含 3 个属性 id name rowNo( 行号 ) 。在下面我们将使用 org.apache.commons.beanutils 包提供为我们的一些接口和类来处理上面提到的需求。

1.1. DynaBean and DynaClass

DynaBean DynaClass beanutils 包实现 DynaBean 最基本、最常用的接口。对于 DynaBean DynaClass 你可以这样理解, DanyBean 提供了可以动态修改实现他的类的属性名称、属性值、属性类型的功能;而 DynaClass 负责为一个或者多个实现了 DanyBean 接口的对象提供属性的功能, DynaClass 提供的属性正是我们动态创建的那些属性参考 。如果你不理解,在下一节 BasicDynaBean and BasicDynaClass 我们以实例展示。

关于 DynaBean DynaClass 的详细描述,参见 DynaBean DynaClass

1.2. BasicDynaBean and BasicDynaClass

BasicDynaBean BasicDynaClass 分别实现了 DynaBean DynaClass 接口, BasicDynaBean BasicDynaClass 实现了提供一组基本的属性的能力,这组属性是由你动态定义的,而且这组属性中的成员应该是 DynaProperty 类的实例。首先,你要为 DynaClass 创建你所关心的一组属性,代码如下:

示例代码:

           DynaProperty[] props = new DynaProperty[]

{

                   new DynaProperty("id",String.class),

                   new DynaProperty("name", String.class),

                   new DynaProperty("rowNo", int.class),

                   new DynaProperty("c1",  long.class),

                   new DynaProperty("c2",long.class),

                   new DynaProperty("c3",long.class)

           };

BasicDynaClass dynaClass = new BasicDynaClass("basicReport", null, props);

说明:                                                                

       BasicDynaClass 一共提供了3个构造函数,我这里强调的只有一点,对于参数dynaBeanClass的一个说明。在上面的代码中,我们指定要创建一个名称为“ basicReport ”的DynaBean,dynaBeanClass参数说明的是你希望系统为你创建的DynaBean的类型是什么,如果为null的话,系统就认为你要创建的是BasicDynaBean类型的DynaBean实例。如果你希望用其他类型代替null的话,那么指定的类应该实现了DynaClass接口,否则就会抛出IllegalArgumentException 异常                      

在上面的代码中,我们假设为 basicReport 创建了 6 个属性,同时告诉了 BasicDynaClass ,我们需要创建一个名称为 basicReport 的报表, basicReport 的类型我们采用默认的 BasicDynaBean 。接下来,我们由 dynaClass 对象为我们实例化我们设置的这个动态对象,参考代码如下:   

                 

示例代码:

              DynaBean basicReport = dynaClass.newInstance();

           basicReport.set("id","124578");

           basicReport.set("name"," 在校生数 ");

           basicReport.set("rowNo",new Integer(1));

           basicReport.set("c1",new Long(125));

           basicReport.set("c2",new Long(125));

           basicReport.set("c3",new Long(125));

             

              String id = (String)basicReport.get(“id”);

              String name = (String) basicReport.get("name");

           int rowNo = ((Integer)basicReport.get("rowNo")).intValue();   

 

在上面的代码中我们完成了 DynaBean 的实例化 (basicReport) ,并且对实例化的 basicReport 进行了设置和获取的操作。

关于 DynaBean 还有其他形式的应用,像 ResultSetDynaClass LazyDynaBean 等分别描述了如何处理数据库检索结果集的 DynaBean 处理、以及简略 DynaProperties 处理的 LazyDynaBean 的处理方式,这些都能极大地简化开发过程中 JavaBean 的处理,要了解更多请参考 http://jakarta.apache.org/commons/beanutils/api/index.html

上面讲述的常常是在逻辑处理时碰到的,那么在 Struts 框架下动态的页面的显示以及提交是否也有这方面的处理呢?答案是肯定的。         

 

 

 

 

 

分享到:
评论

相关推荐

    有关动态bean的一些用法

    设置完属性后,我们就可以像操作普通JavaBean一样使用这个DynaBean了,只是访问属性时使用get()方法和属性名,而不是getter方法。 总结起来,使用动态Bean的好处在于它的灵活性。我们可以在程序运行时根据需要动态...

    commons-beanutils

    5. ** DynaBean **: DynaBean是一种动态Bean,它的属性可以在运行时动态添加、删除或修改,与标准Java Bean相比更具有灵活性。`DynaClass`和`DynaProperty`是支持DynaBean的类,它们提供了动态管理属性的能力。 6. ...

    commons-beanutils-1.6.zip

    开发者可以使用`DynaClass`来创建不需预先定义的DynaBean实例。 5. **Introspector**: 这个模块提供了对JavaBean的元数据(如属性、构造函数和方法)的深入洞察。通过`describe()`方法,开发者可以获取Bean的完整...

    json-lib net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx

    **MorphDynaBean**是ezmorph库中的一个类,实现了`org.apache.commons.beanutils.DynaBean`接口。这个接口允许在运行时动态地添加、删除和获取属性,提供了一种灵活的方式来处理和操作对象。`MorphDynaBean`可以接收...

    beanutils-1.8.3开发包

    1. **属性操作**:使用`PropertyUtils`类,可以方便地读取和设置JavaBean的任何属性,即使属性是嵌套的或者需要转换类型。 2. **复制属性**:`BeanUtils.copyProperties()`方法可以将一个对象的所有属性值复制到另...

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

    - DynaBean:一个动态的Bean实现,可以处理未知属性。 4. Jakarta Commons数学和时间库 这些库提供了额外的数学和时间处理功能,包括用于时间操作的工具类(例如DateFormatUtils、DateUtils、SimpleDateFormat和...

    apache commons 帮助文档电子书

    - DynaBean、DynaClass、DynaProperty:提供了动态创建和操作Bean的能力。 ***mons Collections库提供了对Java集合框架(java.util.*)的一些扩展。包括: - 集合的工具类:如快速集合(FastArrayList等)和扩展...

    导入json包的一些注意

    如果没有它,你可能会遇到`java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean`的错误。 2. **commons-collections.jar**: 包含了集合操作的各种实用工具类,如`ListOrderedMap`,在处理JSON...

    json使用介绍系列一.pdf

    同样,缺少`ezmorph-1.0.6.jar`会导致`net.sf.ezmorph.Morpher`类无法找到,而`commons-beanutils-1.8.0.jar`对于`DynaBean`类的使用至关重要。 在实际使用中,将Java对象转换为JSON格式,可以通过JSON库提供的API...

    java-json解析包jar

    对于更复杂的情况,如转换Java的类实例,可能需要实现`Serializable`接口或使用自定义的转换逻辑。 ```java JSONObject obj = new JSONObject(); obj.put("name", "John"); obj.put("age", 30); // 或者,对于复杂...

    Json与java对象转换所需架包

    commons-beanutils-1.8.0.jar org/apache/commons/beanutils/DynaBean commons-collections.jar org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar org/apache/commons/lang/exception/...

    commons.collections-3.2.1和commons-beanutils-1.9.2和commons.collections-3.2.1

    1. **集合转换**:可以将一个集合转换成另一种集合类型,如List转Set或Map。 2. **迭代器增强**:提供了一些迭代器的扩展,比如反向迭代、过滤迭代等。 3. **工厂方法**:创建集合、映射和迭代器的工厂,简化代码...

    Apache commons jar包常用类讲解--Jakarta Commons 学习.pdf

    - **DynaBean/DynaClass/DynaProperty**:提供了动态Bean的支持。 - **BasiceDyanBean/BasicDynaClass**:基本的动态Bean实现。 - **WrapDynaBean/WrapDynaClass/ConvertingWrapDynaBean**:提供了包装动态Bean的...

    xmltojson有效的方法

    数据很复杂时,JavaScript程序员喜欢把他们作为json串进行处理,后台收到后需要对json字符串进行解析,幸好有JSON-lib,这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

    将List集合中的map对象转为List<对象>形式实例代码

    for (DynaBean stubean : stuGroupList) { if (stubean.get("GROUP_ID") != null && stubean.get("GROUP_ID").equals(group_id)) { LinkedHashMap map = new LinkedHashMap(); map.put("choose_id", ...); // .....

    Jakarta+Commons中文介绍

    **StringEscapeUtils** 类提供了字符串转义和取消转义的功能,方便在不同场景下安全地使用字符串。 ##### SystemUtils **SystemUtils** 类提供了一些关于系统属性的信息,比如操作系统类型、JVM版本等。 ##### ...

    hbase-sql:通过sql来查询hbase上的数据

    hbase本身提供的api中, 只有scan是用来查询数据的, 因此我们需要将sql语句转成scan 参考<<>>发现是可行的 因此总体架构为 sql语句 --sql解析器--> sql语法节点(对象) -> scan -> hbase -> ResultScanner ->...

    Hutool 参考文档.pdf

    集合类概述、Bean工具(BeanUtil)和DynaBean为Java集合框架和JavaBean操作提供了便利。表达式解析(BeanPath)、集合工具(CollUtil)、Iterator工具(IterUtil)和有界优先队列(BoundedPriorityQueue)则为集合...

Global site tag (gtag.js) - Google Analytics