Java Beanutils 简明教程

Java BeanUtils - Lazy DynaBeans

Description

Lazy DynaBeans 是 DynaBean 的实现,它提供 Lazy List 和 Lazy Map 的特性,这些特性连接了 DynaClass 的属性。有四种类型的 Lazy DynaBeans:

  1. LazyDynaBean :它指定提供名称和数据类型的动态修改属性的惰性 DynaBean。

  2. LazyDynaMap :它提供 DynaBean 的轻量级实现,通过使用惰性映射或列表系统映射。

  3. LazyDynaList :它提供 DynaBean、Map 或 POJO(指定常规 Java 类的普通旧 Java 对象)的列表。

  4. LazyDynaClass :它实现 MutableDynaClass 接口。

以下是 Lazy DynaBeans 的特性:

  1. Lazy property addition :惰性 bean 使用它在调用 set 方法时自动向 DynaClass 添加属性,并且它有能力添加或移除 DynaClass 的属性。

  2. Lazy List/Array growth :当索引属性无法适应要设置的索引时,惰性列表或数组将自动增长。

  3. Lazy List/Array instantiation :如果不存在索引属性,则 DynaBean 的索引属性获取和设置方法将导致惰性列表或数组实例化。如果未定义索引属性,则它将自动添加到 DynaClass 中,并实例化默认列表实现。

  4. Lazy Map instantiation :如果不存在映射属性,则 DynaBean 的映射属性获取和设置方法将导致惰性映射实例化。如果未定义映射属性,则它将自动添加到 DynaClass 中,并实例化默认映射实现。

  5. Lazy Bean instantiation :如果 DynaClass 属性被定义为 DynaBean 或常规 bean 且不存在于 DynaBean 中,则 LazyDynaBean 将使用默认的空构造函数实例化 bean。

LazyDynaBean

它是一种标准惰性 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 生成的 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 或 POJO(指定普通 java 类的简单旧 Java 对象)中提供列表。这个类的两个要点是:

  1. 它自动增长并占用由 DynaBean、java.util.Map 或 POJO 指定的列表,以指定延迟列表行为。

  2. 它提供了一种简单的方法将集合或数组放入延迟列表中,并提供了一种从延迟列表中恢复的简单方法。

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