现在的位置: 首页 > 综合 > 正文

beanutils -LazyDynaBean

2013年10月15日 ⁄ 综合 ⁄ 共 1508字 ⁄ 字号 评论关闭

 它实现一个动态的Bean,可以直接往里面加入属性,作为一个JavaBean一样使用,也可以用上面的BeanUtils或get/set方法进行操作,而不用事先定义一个标准的JavaBean类啦:)
记得在J2ee设计模式中有一种Value Object的模式,用于在MVC各层之间传递数据,避免直接传递大业务对象引起的性能问题,为了避免在项目中出现很多Bean类,在书中提供了一个动态Value Object的实现(通过扩展Map)。这里LazyDynaBean则可以作为一种更加成熟、稳定的实现来使用。呵呵,原来曾打算自己写一个类似的value object类的,现在看来可以直接用这个啦:P
       言归正传,LazyBean的确提供了一个很不错的DynaBean的实现。而且就像它的名字中表述的那样,它的确是为我这样的懒人考虑的很周到,用起来几乎不需要写什么多余的代码^_^,下面就看看使用的例子吧!
         //这里使用LazyDynaMap,它是LazyBean的一个轻量级实现

      LazyDynaMap dynaBean1 = new LazyDynaMap();
      dynaBean1.set("foo", "bar");                  // simple
      dynaBean1.set("customer", "title", "Mr");        // mapped
      dynaBean1.set("address", 0, "address1");         // indexed
      System.out.println(dynaBean1.get("address",0));
      Map myMap = dynaBean1.getMap();           // retrieve the Map
      System.out.println(myMap.toString());

       上面的例子可以看到,它可以在set时自动增加bean的property(既赋值的同时增加Bean中的property),同时也支持3中类型的property,并且LazyDynaMap还可以导出为map。
       对于这个类还有两个重要的Field要注意:
       returnnull——指定在get方法使用了一个没有定义过的property时,DynaBean的行为。
//取的字段的信息
dynaBean1.setReturnNull(true);
//设为ture。若Bean中没有此字段,返回null
//默认为false。若Bean中没有此字段,自动增加一个:)
System.out.println(dynaBean1.get("aaa"));//此时返回null
Restricted——指定是否允许改变这个bean的property。
//MutableDynaClass.setRestricted设为true后,字段不可再增删和修改.
//默认为false,允许增删和修改
dynaBean1.setRestricted(true);
dynaBean1.set("test","error");//这里会出错!

       通过设置这两个属性,可以防止意外修改DynaBean的property。在设计架构时,你可以在后台从数据表或xml文件自动产生DynaBean,在传到控制层和表示层之前设置上述属性使其Bean结构不允许修改,如此就不可能无意中修改Bean包含的属性……这样既可以享用它的便利,有可以防止由此引入的错误可能,设计者实在深得偷懒的精髓啊!!!!!

抱歉!评论已关闭.