4

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

那么有人能说出什么时候使用 Dynamic Bean 是好的情况吗?

谢谢

4

2 回答 2

2

Dynamic beans typically allow you to get and set fields which may not be explicit members. The most direct comparison is a map - maps allow you to get and set fields without defining them beforehand. However, a dyanamic bean conforms to standard java idioms (getters/setters).

Unlike a hashmap, however, dyanbeans can enforce constraints more readily (and they hide the underlying data structure implementation, so they can be lazy, or make data connections when being set, etc... ) . For example, you can easily add a getter or setter to your dynabean that is explicit, and the code would read very idiomatically and cleanly interact with other bean apis.

public int getCost()
{ 
    if(this.get("cost")==null)
     return -1;
    return Integer.parseInt(super.get("cost"));
}
于 2011-10-06T16:00:29.227 回答
2

ATG 中关于动态 bean 最有用的部分是为尚未涵盖的类提供额外的 DynamicPropertyMapper 类。首先,请注意,您可以使用 DynamicBeans.setPropertyValue(object, property, value) 和 DynamicBeans.getPropertyValue(object, property) 静态方法来设置或获取对象上不一定与 Java bean 属性对应的属性。如果您使用的对象没有注册动态 bean,它会默认尝试使用 Java bean 属性。提供开箱即用的支持以使用存储库项(属性对应于存储库项属性;自然也适用于 Profile 对象)、DynamoHttpServletRequest 对象(对应于 servlet 参数)、映射/字典(对应于键)、

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

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

于 2013-12-30T03:15:44.730 回答