Hi
问题是关于如何监视一个对象的属性状态变化
就好比在 ServletContextAttributeListener 一样
当 ServletContext 属性发生变化时,会触发一段 代码的执行
我想明白的就是 如果做,才能 监视自己写的对象,并在其 指定属性发生变化时,出发一段代码呢?
请各位赐教下,小弟在此感激不尽
监控属性变化,可以使用Observer模式,Java本身提供对这种模式的支持,你按下面的例子看一下:
///你需要临视的Bean
package com.test;
import java.util.Observable;
public class Product extends Observable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
///下面两段代码用于监控
setChanged();
notifyObservers(name);
}
}
///监控者
package com.test;
import java.util.Observable;
import java.util.Observer;
public class NameObserver implements Observer{
private String name=null;
public void update(Observable obj, Object arg) {
if(arg instanceof String){
name=(String)arg;
System.out.println("名字有变化");
}
}
///main用于测试
public static void main(String[] str){
NameObserver nameObserver=new NameObserver();
Product product=new Product();
product.addObserver(nameObserver);
//
product.setName("ccc");
}
}
当然了你还可以使用代理或spring aop的切面编程来做 :)
使用代理模式,可参考hibernate对于脏对象检测的方法,具体说就是生成一个你要监控的对象的子类,子类的方法统统委托给父类来做,然后再方法里面加入你自己的监控代码就可以了。
81261686 已经把可能都给你说了,其实这些东西的实质是什么。我想你也明白,我们就拿生活的举例来说吧。
当我们想去用网捕鱼的时候,我们要先把网放到那里,当鱼游过的时候我们要去提网。
这个过程中,人一直是在监听的状态,也就是说当鱼到网的时候,它不会主动告诉你它来了。
因此我们要做监听的话,我们就需要投入的东西很多。
一种办法就是观察者模式,虽然我现在还不明白其中的原理,但是感觉这些都不离不开反射的机制。。。