首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在Java中为web应用程序添加对PropertyChangeSupport和PropertyChangeListener的支持吗?

我应该在Java中为web应用程序添加对PropertyChangeSupport和PropertyChangeListener的支持吗?
EN

Stack Overflow用户
提问于 2009-06-09 19:09:55
回答 3查看 9.3K关注 0票数 10

我注意到,有些人编写bean时支持属性更改观察者模式。

代码语言:javascript
复制
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;

public class SampleBean implements Serializable {
    public static final String PROP_SAMPLE_PROPERTY = "sampleProperty";
    private String sampleProperty;
    private PropertyChangeSupport propertySupport;

    public ChartBean() {
        propertySupport = new PropertyChangeSupport(this);
    }

    public String getSampleProperty() {
        return sampleProperty;
    }

    public void setSampleProperty(String value) {
        String oldValue = sampleProperty;
        sampleProperty = value;
        propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty);
    }


    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }
}

然而,我记得我读到,由于web应用程序的无状态性,观察者模式在基于web的MVC模式中并不常用。

web应用程序 Java?中遵循上述模式是一个很好的实践吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-09 19:17:02

老实说,如果你真的需要这个功能,那就麻烦了。大多数web应用程序不需要PropertyChangeSupport。实际上,我不记得在我见过的任何网络应用程序中都使用过它。我只看到它被用作Swing应用程序。

web应用程序中典型的bean是一个非常短的对象,可以为单个请求提供服务,然后丢弃到空中进行垃圾收集。主要的问题是,web应用程序是我的本质,并发和多用户,这并不能将自己借给具有侦听器和事件等更长寿的对象。

票数 10
EN

Stack Overflow用户

发布于 2009-06-09 19:45:26

无论如何,PropertyChangeListener的设计都很糟糕--所有这些神奇的字符串比较。最好使用ChangeListener (或类似的)简单的模型,并将其与复合模型结合在一起。

除非您正在做一些交互式的和COMETy的事情,否则在web应用程序中它就没有多大意义了。您通常有一个拉模型,其中所有当前的信息是捆绑在一起的。在你有缓存的地方可能是有道理的。

您甚至可以以与webapps相同的方式编写桌面应用程序。任何更改(或一系列更改)并同步GUI。事实证明这是相当紧凑的。此外,性能成本从重大更改的关键时刻(如打开窗口)转移到非关键时间,在非关键时刻,您有周期要消耗。

票数 3
EN

Stack Overflow用户

发布于 2009-07-29 17:10:22

1)不要添加属性更改支持,除非您知道需要它。

2)如果您的bean只是一个值对象,没有比getters/setters/equals/hashcode更多的东西,那么请考虑使用AOP框架(我喜欢Spring)将对象包装为用于实现属性更改事件/支持的建议。这样,bean就不会受到逻辑的污染,这种逻辑只需要在特定的上下文(通常是UI)中使用,并且在不同的上下文中可能会发生变化。这是我在为特定应用程序添加所有域bean的属性更改支持时学到的一课-- UI使用了它,但它混淆了服务器团队(没有在那里使用),只是没有使用它的地方的噪音。

我也同意,有时您不需要听取单个属性,只需知道对象中是否有任何变化就足够了。

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

https://stackoverflow.com/questions/971927

复制
相关文章

相似问题

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