`

转: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 框架下动态的页面的显示以及提交是否也有这方面的处理呢?答案是肯定的。         

 

 

 

 

 

分享到:
评论

相关推荐

    Dyna Bean的使用

    本文属于作者原创,属于apache Dany Bean 方面入门的文章.

    使用json-lib-2.2.2-jdk15.jar所要用到的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/lang/...

    使用json所要用到的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/...

    java使用json的必备7个jar包

    在java中使用json需要引入以下六个jar包,分别为: commons-lang-2.4.jar commons-collections-3.2.1.jar commons-beanutils-1.8.3.jar json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging-1.1.3.jar ...

    JSON需要的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...

    json所有的jar包下载

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException java.lang.NoClassDefFoundError: org/apache/commons/lang/...

    使用MINA进行UDP通信实现数据导入

    有丰富的MINA通信软件开发经验,现在已经有成熟的底层框架(结合了反射、DynaBean、Spring等多种技术),可以实现程序自动对上位机和下位机之间的通信协议进行解析,并在国网公司智能电网的大型项目中使用。...

    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/...

    json所需JAR包合集

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections-3.2.2.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons...

    java--json解析包

    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-...

    JEPLUS功能新特性.rar

    01.JEPLUS新特性(系统功能).mp4 02.JEPLUS新特性(数据源讲解).mp4 ...19.JEPLUS数据库操作DynaBean.mp4 20.Excel导入技巧.mp4 21.定时任务、流程事件灵活运用.mp4 22.对接第三方数据库使用案例.mp4

    json-jar包-2017

    json-lib-2.4-jdk15.jar,ezmorph-1.0.6.jar,commons-lang-2.6.jar,commons-beanutils-1.9.3.jar,commons-collections-3.2.2.jar,commons-logging-1.2.jar

    java-json解析包jar

    Java的Json串解析包,提供给有需要的同学。

    xmltojson有效的方法

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

    java8stream源码-coala-binder:代理的通用本体抽象层——一种上下文绑定器,用于跨AOSE/MAS和M&S/ABM重用异构

    java8流源码可乐 代理的通用本体抽象层——一种上下文绑定器,用于跨 AOSE/MAS 和 M&S/ABM 重用异构代理代码 ...透明DynaBean装饰的Wrapper API(使用java.lang.reflect.Proxy和java.beans.Introspector )支

    commons-beanutils-1.9.1解析javaBean方式

    Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的...4.5 动态Bean 见用DynaBean减除不必要的VO和FormBean

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

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

    SwingController-开源

    SwingController 是 Swing/AWT 应用程序的 MVC 框架,支持拦截过滤器、Commander、带有组件注释的数据绑定、Jakarta DynaBean 等。

Global site tag (gtag.js) - Google Analytics