首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ATG中的动态Bean的用途是什么

ATG中的动态Bean的用途是什么
EN

Stack Overflow用户
提问于 2011-09-30 21:12:54
回答 2查看 2.6K关注 0票数 4

我已经阅读了文档,但是没有定义动态Bean的主要用途。我知道如何实现这一点,但不知道为什么这种方法这么好。

那么,谁能告诉我们什么时候使用动态Bean是好的呢?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-07 00:00:29

动态bean通常允许您获取和设置字段,这些字段可能不是显式成员。最直接的比较是映射-映射允许您在不预先定义字段的情况下获取和设置字段。但是,动态bean符合标准的java习惯用法(getters/setters)。

然而,与hashmap不同,dyanbeans可以更容易地强制执行约束(并且它们隐藏了底层数据结构实现,因此它们可以是惰性的,或者在设置时建立数据连接,等等……)。例如,您可以很容易地向您的dynabean添加显式的getter或setter,并且代码可以非常地道地读懂,并且干净地与其他bean apis交互。

代码语言:javascript
运行
复制
public int getCost()
{ 
    if(this.get("cost")==null)
     return -1;
    return Integer.parseInt(super.get("cost"));
}
票数 2
EN

Stack Overflow用户

发布于 2013-12-30 11:15:45

关于ATG中的动态bean,最有用的部分是为它尚未涵盖的类提供额外的DynamicPropertyMapper类。首先,请注意,您可以使用DynamicBeans.setPropertyValue( object,property,value)和DynamicBeans.getPropertyValue(object,property)静态方法来设置或获取对象上不一定与Java bean属性相对应的属性。如果您正在使用的对象没有注册到动态bean,它将在缺省情况下尝试使用Java bean属性。提供了对存储库项目(属性对应于存储库项属性;自然也适用于Profile对象)、DynamoHttpServletRequest对象(对应于servlet参数)、映射/字典(对应于键)和DOM节点对象(对应于元素属性,后跟Node的getter/setter)的开箱即用支持。

要向其中添加更多类,需要创建扩展DynamicPropertyMapper的类。例如,假设您希望使用属性使HttpSession对象以类似的方式工作,并回退到HttpSession的getter和setter。然后,您将从DynamicPropertyMapper实现这三个方法,如果您没有为要实现的对象定制任何BeanInfo或DynamicBeanInfo类,则可以使用DynamicBeans.getBeanInfo( object )轻松地实现getBeanInfo(object)类。

一旦你有了一个映射器,你可以用DynamicBeans.registerPropertyMapper(映射器)注册它。通常,这将被放入为其编写属性映射器的类的静态初始化块中。但是,如果要为控制范围之外的另一个类(如HttpSession)创建属性映射器,则需要创建一个全局范围的泛型服务,该服务只需在其doStartService()中调用注册方法。然后,您可以将该服务添加到初始服务中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7610877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档