【问题标题】:Why use javabean bound properties instead of events?为什么使用 javabean 绑定属性而不是事件?
【发布时间】:2010-02-23 16:39:38
【问题描述】:

绑定属性的意义何在?对我来说,它们似乎是使用 EventObjects 的事件的类型安全性较低的版本 - 使用字符串相等性检查 event.getPropertyName() 似乎有点弱。

你为什么要使用一个而不是另一个?

【问题讨论】:

    标签: java properties components javabeans


    【解决方案1】:

    Java Beans 的全部意义在于,系统(尤其是 GUI 构建器)可以检查 Java Bean 并对其进行配置,而无需事先了解该组件。

    虽然这很酷,但它确实只在这种特定情况下有用,而且现在注释会更好地工作。

    所以他们使用绑定属性的原因仅仅是为了支持这种插入式 GUI 组件技术,除非您需要支持反射式 gui 构建系统,否则我不会真的更喜欢它而不是事件。

    回复@Mike rodent

    假设您允许您的用户创建一个您将控制的类。这个类有一个“Main”,可以处理几个事件。

    通常你会让你的用户做这样的事情:

    类用户类(someClass){ 无效的主要方法(){ someClass.addEventListener(new EventListener() { 公共无效事件发生(事件 e){ 事件1(e) } } } someClass.addDifferentEventListener(新的DifferentEventListener(){ 公共无效事件发生(不同事件 e){ 事件2(e) } } } } 公共无效事件1(事件e){ //事件1的java代码 } 公共无效事件2(不同事件e){ // 事件 2 的 java 代码 } }

    无论如何,你明白了。当然,您假设这个类在某处注册——可能在一个 xml/config 文件中。您读取它、实例化它并执行 mainMethod(由协议或接口定义),它会自行注册并开始获取对事件处理程序的调用。

    现在,您可以通过注释来完成同样的事情:(您可能会认出这种模式——这几乎就是 Junit 对测试进行注释的方式。)

    类用户类(){ @事件1 无效事件1方法(事件e){ event1的代码 } @事件2 无效事件2方法(另一个事件e){ event2的代码 } }

    这更直接,并且删除了大部分样板,并且还消除了对协议或接口的需要,注释更清晰地定义和独立。 (如果您想检查传递给方法的参数,您实际上甚至不需要事件注释,但龙就在这个大方向上)。

    您仍然需要在某个地方注册该类,但这次您只需扫描每个方法中的事件注释并自己注册它们。既然读取和处理这样的类只需几行代码,为什么要将这种模式限制在单元测试中呢?

    我发现另一件事非常巧妙,我将这种模式用于“插入”到我的 Java 程序中的 Groovy 类。由于无论如何我都在编译给定目录中的所有类,因此扫描注释是微不足道的。对用户的影响是他放入(或编辑)一个正确注释的 groovy 文本文件,我的代码立即编译、集成并开始调用他们的事件处理程序。

    【讨论】:

    • 我对您对注释的评论很感兴趣:您能否提供一个链接或简要说明如何将注释用于事件处理?
    【解决方案2】:

    我认为 JavaBeans 规范的设计考虑了通用对象处理。例如,将 JavaBean 放入 IDE 并使用可视属性编辑器对其进行配置。在这种情况下,IDE 将使用通用 PropertyChangeEvent 等。

    或者,如果您想将相同命名的属性从一个 bean 复制到另一个......这是 bean 使用的另一种情况(BeanUtils 类)。

    但是,如果您打算做具体的事情,正如 Noel Ang 所说,我建议您使用强类型。

    【讨论】:

      【解决方案3】:

      JavaBeans 是一种规范。它将绑定属性定义为修改后会发出通知的属性,PropertyChangeEvent 是被批准的通知实体。

      所以假定的 JavaBeans-spec bean 编辑器应该监听 PropertyChangeEvents。除了需要使用该规范之外,我自己也不会使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 2020-02-07
        • 2011-01-11
        • 2020-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多