懒惰的 DynaBeans(Lazy DynaBeans)
描述 (Description)
Lazy DynaBeans是DynaBean的一个实现,它提供了Lazy List和Lazy Map的特性,它连接了DynaClass的属性。 有两种类型的Lazy DynaBeans:
LazyDynaBean :它指定惰性DynaBean,它提供名称和数据类型的动态修改属性。
LazyDynaMap :它通过使用惰性映射或列表系统,使DynaBean的轻量级实现映射。
LazyDynaList :它提供DynaBean,Map或POJOS(指定普通java类的Plain Old Java Object)的列表。
LazyDynaClass :它实现了MutableDynaClass接口。
以下是Lazy DynaBeans的功能:
Lazy property addition :当调用set方法时,Lazy bean使用它来自动向DynaClass添加属性,并且它具有添加或删除DynaClass属性的功能。
Lazy List/Array growth :当索引属性无法容纳正在设置的索引时,惰性列表或数组将自动增长。
Lazy List/Array instantiation :如果不存在索引属性,则DynaBean的索引属性getter和setter方法会导致延迟列表或数组实例化。 如果未定义索引属性,则它将自动添加到DynaClass并实例化默认的List实现。
Lazy Map instantiation :如果不存在映射属性,则DynaBean的映射属性getter和setter方法将导致延迟映射实例化。 如果未定义映射属性,则它将自动添加到DynaClass并实例化默认的Map实现。
Lazy Bean instantiation :如果DynaClass属性定义为DynaBean或常规bean且DynaBean中不存在,则LazyDynaBean将使用默认的空构造函数实例化bean。
LazyDynaBean
它是标准lazy bean的实现,它指定了惰性DynaBean,它提供了名称和数据类型的动态修改属性。 它通过与LazyDynaClass相关联来实现MutableDynaClass接口。 下面的简单代码通过使用getter或setter来显示LazyDynaBean的用法:
DynaBean dynaBean = new LazyDynaBean();
dynaBean.set("company", "Model"); // simple
dynaBean.set("customer", "fname", "Steve"); // mapped
dynaBean.set("customer", "lname", "Smith"); // mapped
dynaBean.set("address", 0, addressLine1); // indexed
dynaBean.set("address", 1, addressLine2); // indexed
LazyDynaMap
它通过使用惰性映射或列表系统使DynaBean的轻量级实现映射,并且它不与DynaClass的属性相关联。 它本身实现了DynaClass接口,并从地图内容中获取DynaClass的信息。 LazyDynaMap通过实例化它来创建自己的Map,或者可以在现有Map周围生成。
以下代码显示了新地图的创建:
DynaBean dynaBean = new LazyDynaBean();
DynaBean dynaBean = new LazyDynaMap(); // create DynaBean
dynaBean.set("company", "Model"); // simple
dynaBean.set("customer", "fname", "Steve"); // mapped
dynaBean.set("address", 0, addressLine1); // indexed
Map demoMap = dynaBean.getMap() // retrieve the Map
以下代码显示了在DynaBean中使用现有Map:
Map demoMap = .... // exisitng Map
DynaBean dynaBean = new LazyDynaMap(demoMap); // wrap Map in DynaBean
dynaBean.set("ford", "raptor"); // set properties
LazyDynaList
它提供了DynaBean,Map或POJOS(指定普通java类的Plain Old Java Object)的列表。 这个课有两个要点:
它会使用DynaBean,java.util.Map或POJOS自动增长并占用列表,以指定惰性列表行为。
它提供了将Collection或Array放入Lazy列表的简单方法,以及从Lazy List中轻松实现的方法。
LazyDynaClass
它实现了MutableDynaClass接口并扩展了BasicDynaClass 。 它可以用作LazyDynaBean的默认DynaClass和其他DynaBean实现。 当您使用LazyDynaBean时,DynaClass没有任何内容。
下面的代码创建了LazyDynaClass:
MutableDynaClass dynaClass = new LazyDynaClass(); // create DynaClass
dynaClass.add("price", java.lang.Integer.class); // add property
dynaClass.add("orders", OrderBean[].class); // add indexed property
dynaClass.add("orders", java.util.TreeMapp.class); // add mapped property
DynaBean dynaBean = new LazyDynaBean(dynaClass); // Create DynaBean with associated DynaClass
下面的代码创建了LazyDynaBean并获取了DynaClass:
DynaBean dynaBean = new LazyDynaBean(); // Create LazyDynaBean
MutableDynaClass dynaClass =
(MutableDynaClass)dynaBean.getDynaClass(); // get DynaClass
dynaClass.add("price", java.lang.Integer.class); // add property
dynaClass.add("exBeans", myPackage.MyBean[].class); // add 'array' indexed property
dynaClass.add("exMap", java.util.TreeMapp.class); // add mapped property