2012-03-22 80 views
2

在Java中,只要对象的任何属性发生更改,对象就会触发事件的最优雅方式是什么?Java - 当对象的任何属性发生变化时触发事件

我的域模型有几个对象,如

class MyClass { 

    String id; 
    String name; 
    Collection<MyThing> mythings= new HashSet<MyThing>(); 
    // more fields... 
    Date lastUpdated; 

    //constructor, getters and setters, etc 
} 

我需要LASTUPDATED设置为“今天”,只要任何属性(ID /名称/ mythings)的变化。

我宁愿一个解决方案,是不是JDO特有的,绝对不希望在数据存储区(在RDBMS等自动时间戳列)这个逻辑。

我可以把

this.lastUpdated = new Date(); 

在每一个二传手,或火灾在每一个二传手自定义事件,但是这是丑陋且容易出错。

有没有更优雅的解决方案?

+0

FYI,这听起来完全像什么的Java bean是,你可能想看看他们。 – 2012-03-22 01:18:58

+1

AOP需要一个接口,除非你打算做字节码增强。我通常不使用模型对象的接口。我不会为这个用例推荐AOP。 – duffymo 2012-03-22 12:11:18

回答

1

您可以实现PropertyChangeListener接口和寄存器你对客户的兴趣。自从1.0以来它一直是Java Bean规范的一部分。

他们是不是所有的UI元素。它们被设想为一种匹配IDE的VB类功能的方法(例如Bean Factory)。

http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

http://weblogs.java.net/blog/joshy/archive/2006/02/all_hail_the_pr.html

+0

我碰到过那个。 http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html#bound - 看看这些例子,似乎我仍然必须在setter中为每个属性设置firePropertyChange,以满足我希望这种行为的所有属性? – MT1 2012-03-22 01:40:10

+0

你还期望如何发生? – duffymo 2012-03-22 09:18:59

+0

我希望有一个自动的“onUpdated”事件被埋在我可以使用的某个地方,或者一个具有我可以扩展的功能的类。你的答案似乎是“尽善尽美”;谢谢! – MT1 2012-03-23 18:32:47

相关问题