问题描述
Hi问题是关于如何监视一个对象的属性状态变化就好比在 ServletContextAttributeListener 一样当 ServletContext 属性发生变化时,会触发一段 代码的执行我想明白的就是 如果做,才能 监视自己写的对象,并在其 指定属性发生变化时,出发一段代码呢?请各位赐教下,小弟在此感激不尽
解决方案
监控属性变化,可以使用Observer模式,Java本身提供对这种模式的支持,你按下面的例子看一下:///你需要临视的Beanpackage 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的切面编程来做
解决方案二:
81261686 已经把可能都给你说了,其实这些东西的实质是什么。我想你也明白,我们就拿生活的举例来说吧。当我们想去用网捕鱼的时候,我们要先把网放到那里,当鱼游过的时候我们要去提网。这个过程中,人一直是在监听的状态,也就是说当鱼到网的时候,它不会主动告诉你它来了。因此我们要做监听的话,我们就需要投入的东西很多。一种办法就是观察者模式,虽然我现在还不明白其中的原理,但是感觉这些都不离不开反射的机制。。。
解决方案三:
使用代理模式,可参考hibernate对于脏对象检测的方法,具体说就是生成一个你要监控的对象的子类,子类的方法统统委托给父类来做,然后再方法里面加入你自己的监控代码就可以了。