2010-02-23 105 views

回答

1

Java Beans的重点在于系统(特别是GUI Builder)可以检查Java Bean并在没有任何此组件的情况下对其进行配置。

虽然这相当酷,但它只在这种特定情况下才有用,现在这些注释会更好。

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

响应@Mike啮齿动物

比方说,你让你的用户创建一个类,您将控制。这个班有一个“主”,可以处理几个事件。

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

 
class UserClass(someClass) { 
    void mainMethod() { 
     someClass.addEventListener(new EventListener() { 
      public void eventsHappen(Event e){ 
        event1(e) 
       } 
      } 
     } 
     someClass.addDifferentEventListener(new DifferentEventListener() { 
      public void eventsHappen(DifferentEvent e){ 
        event2(e) 
       } 
      } 
     } 
    } 

    public void event1(Event e) { 
     //java code for event 1 
    } 
    public void event2(DifferentEvent e) { 
     // java code for event 2 
    } 
}

无论如何,你的想法。当然,你认为这个类是在某处注册的 - 可能是在xml/config文件中。你读它,实例化它并执行mainMethod(由协议或接口定义),它自己注册并开始调用事件处理程序。

现在,这里是你如何能做到用注解同一件事:(您可能认识的格局 - 这几乎是Junit的是如何诠释测试。)

 
class UserClass() { 
    @Event1 
    void event1Method(Event e) { 
     event1's code 
    } 
    @Event2 
    void event2Method(AnotherEvent e) { 
     event2's code 
    } 
} 

这是更为直刚愎和去除大部分的样板,并且它也消除了对协议或界面的需求,注释更加清晰地定义和独立。 (如果你关心的是传递给方法的参数,你实际上甚至不需要事件注释,但是龙就是在这个大方向上)。

您仍然需要在某处注册的类,但是这次您只需扫描每种方法以查找事件注释并自行注册它们。由于只有几行代码才能读取和处理类,所以为什么要限制这种模式进行单元测试?

我发现的另一件事情非常整洁,我将这种模式用于“插入”到我的Java程序中的Groovy类。由于我正在编译给定目录中的所有类,因此扫描注释很简单。对用户的影响是他插入(或编辑)正确注释的常规文本文件,我的代码立即编译,集成并开始调用他们的事件处理程序。

+0

我对你关于注释的评论很感兴趣:你可以给一个链接或者简单地解释一下注释可以如何用于事件处理? – 2012-11-11 10:39:06

0

JavaBeans是一个规范。它将绑定属性定义为其修改导致发出通知的绑定属性,并且PropertyChangeEvent是受制裁的通知实体。

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

0

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

或者如果你想从一个bean复制同等命名的属性到另一个......这是bean使用(BeanUtils类)的另一种情况。但是,如果你打算做某些具体的事情,就像Noel Ang说的那样,我建议你打字强。

相关问题