📜  Java BeanUtils-惰性DynaBeans

📅  最后修改于: 2020-11-04 07:06:45             🧑  作者: Mango


描述

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

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

  • LazyDynaMap :通过使用惰性地图或列表系统,它为DynaBean的轻量级实现提供了地图映射。

  • LazyDynaList :它提供DynaBean,Map或POJOS(指定普通Java类的普通Java对象)的列表。

  • LazyDynaClass :它实现MutableDynaClass接口。

以下是Lazy DynaBeans的功能:

  • 惰性属性添加:调用set方法时,惰性bean会使用它自动将属性添加到DynaClass中,并且具有添加或删除DynaClass属性的功能。

  • 惰性列表/数组的增长:当索引属性无法容纳正在设置的索引时,惰性列表或数组将自动增长。

  • 延迟列表/数组实例化:如果不存在索引属性,则DynaBean结果的索引属性getter和setter方法将导致延迟列表或数组实例化。如果未定义索引属性,则它将自动添加到DynaClass并实例化默认的List实现。

  • 延迟映射实例化:如果不存在映射属性,则DynaBean结果的映射属性getter和setter方法将导致延迟映射实例化。如果未定义映射的属性,则它将自动添加到DynaClass并实例化默认的Map实现。

  • 延迟Bean实例化:如果DynaClass属性定义为DynaBean或常规Bean,并且在DynaBean中不存在,则LazyDynaBean将使用默认的空构造函数实例化Bean。

懒人豆

它是标准延迟bean的实现,它指定了延迟DynaBean,该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

LazyDyna地图

它提供了轻量级的DynaBean实现,可以使用惰性映射或列表系统进行映射,并且不与DynaClass的属性关联。它本身实现DynaClass接口,并从地图内容获取DynaClass的信息。 LazyDynaMap通过实例化创建自己的地图,或者可以在现有地图周围生成。

以下代码显示了新地图的创建:

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类的普通Java对象)的列表。该课程有两个要点:

  • 它会自动增长,并使用DynaBean,java.util.Map或POJOS占据列表以指定懒惰列表行为。

  • 它提供了将集合或数组放入延迟列表的简便方法,以及从延迟列表中出来的简便方法。

懒人动态类

它实现了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