- 浏览: 76942 次
- 性别:
- 来自: z驻马店
文章分类
最新评论
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);
说明: 在上面的代码中,我们假设为 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 框架下动态的页面的显示以及提交是否也有这方面的处理呢?答案是肯定的。 BasicDynaClass
一共提供了3个构造函数,我这里强调的只有一点,对于参数dynaBeanClass的一个说明。在上面的代码中,我们指定要创建一个名称为“ basicReport ”的DynaBean,dynaBeanClass参数说明的是你希望系统为你创建的DynaBean的类型是什么,如果为null的话,系统就认为你要创建的是BasicDynaBean类型的DynaBean实例。如果你希望用其他类型代替null的话,那么指定的类应该实现了DynaClass接口,否则就会抛出IllegalArgumentException 异常 。
发表评论
-
javascript encodURI() 和 JAVA URLDecoder.decode
2012-08-08 11:11 1468Js中 encodURI(encodURI(xxxx)),在j ... -
关于js中"window.location.href"、"location.href"
2012-04-12 17:08 844关于js中"window.location.href ... -
hibernate.current_session_context_class 错误
2011-12-27 15:24 892在使用SessionFactory的getCurrentSes ... -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
2011-12-27 10:14 809Insert是T-sql中常用语句,Insert INTO t ... -
Java的SPI机制
2011-12-02 15:39 693SPI的全名为Service Provider Interfa ... -
关于TomCat自动加载class问题
2011-12-01 16:49 3293每次用tomcat的时候,每当我对类做了修改必须要重新启动to ... -
Eclipse无法自动编译的问题
2011-11-21 10:37 1137今天遇到了一个小问题,就是eclipse下导入的工程都无法 ... -
HttpSession , HttpSessionListener , HttpSessionBindingListener , HttpSessionAtri
2011-10-26 16:35 830原来我一直认为只有当 ... -
jsp 自定义标签
2011-10-08 21:31 1018有时候web.xml中无法配置<taglib>,原 ... -
Dom4j使用
2011-09-29 19:37 1382先来一段网上的废话: om4j是一个Java的XML API ... -
java.lang.NoClassDefFoundError: org/jaxen/JaxenException
2011-09-29 16:47 1086Exception in thread "mai ... -
commons logging log4js的使用
2011-09-28 17:14 1072为什么要用日志(Log ... -
javascript void(0)的含义
2011-09-28 08:55 943我想使用过ajax的都常见这样的代码:<a href ... -
struts1 验证框架
2011-09-25 11:53 11901:建立validator-rules.xml和 valida ... -
struts1 DispatchAcion
2011-09-24 18:40 863public class LoginAction extend ... -
Exploded location overlaps an existing deployment” 的解决方法
2011-09-24 17:10 980项目->properties->MyEclipse ... -
java程序员面试交流项目经验
2011-09-02 20:23 9681:请你介绍一下你自己 ... -
Java项目开发规范之方法命名规范
2011-09-02 20:19 10431 共用类公共用类要求以“功能英文名称(首字母大写)”+ Ut ... -
伪代码
2011-08-14 19:33 936所谓伪代码其实就是配合初学编程的,常用代码配合写算法,也就是把 ...
相关推荐
设置完属性后,我们就可以像操作普通JavaBean一样使用这个DynaBean了,只是访问属性时使用get()方法和属性名,而不是getter方法。 总结起来,使用动态Bean的好处在于它的灵活性。我们可以在程序运行时根据需要动态...
5. ** DynaBean **: DynaBean是一种动态Bean,它的属性可以在运行时动态添加、删除或修改,与标准Java Bean相比更具有灵活性。`DynaClass`和`DynaProperty`是支持DynaBean的类,它们提供了动态管理属性的能力。 6. ...
开发者可以使用`DynaClass`来创建不需预先定义的DynaBean实例。 5. **Introspector**: 这个模块提供了对JavaBean的元数据(如属性、构造函数和方法)的深入洞察。通过`describe()`方法,开发者可以获取Bean的完整...
**MorphDynaBean**是ezmorph库中的一个类,实现了`org.apache.commons.beanutils.DynaBean`接口。这个接口允许在运行时动态地添加、删除和获取属性,提供了一种灵活的方式来处理和操作对象。`MorphDynaBean`可以接收...
1. **属性操作**:使用`PropertyUtils`类,可以方便地读取和设置JavaBean的任何属性,即使属性是嵌套的或者需要转换类型。 2. **复制属性**:`BeanUtils.copyProperties()`方法可以将一个对象的所有属性值复制到另...
- DynaBean:一个动态的Bean实现,可以处理未知属性。 4. Jakarta Commons数学和时间库 这些库提供了额外的数学和时间处理功能,包括用于时间操作的工具类(例如DateFormatUtils、DateUtils、SimpleDateFormat和...
- DynaBean、DynaClass、DynaProperty:提供了动态创建和操作Bean的能力。 ***mons Collections库提供了对Java集合框架(java.util.*)的一些扩展。包括: - 集合的工具类:如快速集合(FastArrayList等)和扩展...
如果没有它,你可能会遇到`java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean`的错误。 2. **commons-collections.jar**: 包含了集合操作的各种实用工具类,如`ListOrderedMap`,在处理JSON...
同样,缺少`ezmorph-1.0.6.jar`会导致`net.sf.ezmorph.Morpher`类无法找到,而`commons-beanutils-1.8.0.jar`对于`DynaBean`类的使用至关重要。 在实际使用中,将Java对象转换为JSON格式,可以通过JSON库提供的API...
对于更复杂的情况,如转换Java的类实例,可能需要实现`Serializable`接口或使用自定义的转换逻辑。 ```java JSONObject obj = new JSONObject(); obj.put("name", "John"); obj.put("age", 30); // 或者,对于复杂...
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/...
1. **集合转换**:可以将一个集合转换成另一种集合类型,如List转Set或Map。 2. **迭代器增强**:提供了一些迭代器的扩展,比如反向迭代、过滤迭代等。 3. **工厂方法**:创建集合、映射和迭代器的工厂,简化代码...
- **DynaBean/DynaClass/DynaProperty**:提供了动态Bean的支持。 - **BasiceDyanBean/BasicDynaClass**:基本的动态Bean实现。 - **WrapDynaBean/WrapDynaClass/ConvertingWrapDynaBean**:提供了包装动态Bean的...
数据很复杂时,JavaScript程序员喜欢把他们作为json串进行处理,后台收到后需要对json字符串进行解析,幸好有JSON-lib,这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。
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", ...); // .....
**StringEscapeUtils** 类提供了字符串转义和取消转义的功能,方便在不同场景下安全地使用字符串。 ##### SystemUtils **SystemUtils** 类提供了一些关于系统属性的信息,比如操作系统类型、JVM版本等。 ##### ...
hbase本身提供的api中, 只有scan是用来查询数据的, 因此我们需要将sql语句转成scan 参考<<>>发现是可行的 因此总体架构为 sql语句 --sql解析器--> sql语法节点(对象) -> scan -> hbase -> ResultScanner ->...
集合类概述、Bean工具(BeanUtil)和DynaBean为Java集合框架和JavaBean操作提供了便利。表达式解析(BeanPath)、集合工具(CollUtil)、Iterator工具(IterUtil)和有界优先队列(BoundedPriorityQueue)则为集合...