Eclipse内部属性事务机制

org.eclipse.core.commands.common.EventManager
public abstract class EventManager {
	private transient ListenerList listenerList = null;
    ...
}

在EventManager里面存储了所有的监听对象.

 
   protected void firePropertyChange(final int propertyId) {
        Object[] array = getListeners();
        for (int nX = 0; nX < array.length; nX++) {
            final IPropertyListener l = (IPropertyListener) array[nX];
            try {
                l.propertyChanged(WorkbenchPart.this, propertyId);
            } catch (RuntimeException e) {
                WorkbenchPlugin.log(e);
            }
        }
    }


在属性发生改变的时候,需要调用firePropertyChange()方法,该方法会遍历所有的监听,并调用监听的处理事件propertyChanged()方法.

public interface IPropertyListener {
    public void propertyChanged(Object source, int propId);
}

IPropertyListener就只有一个方法,表示,需要处理由特定属性propId的改变去做的响应.


在JavaBean中也有这个概念:
java.beans.PropertyChangeSupport {
addPropertyChangeListener();
firePropertyChange();
}



其实,这本来就是JavaBean的概念. JavaBean的传统应用领域就是UI领域.
而,目前,由于过多的Web UI的开发,使用的都是不带属性的组件.

具体的应用列子可以见:
不用线程实现更改ViewPart的TitleImage
http://lggege.iteye.com/blog/173840

JavaBean组件,的属性分4类:
  •    简单类型, getter & setter & is
  •    索引类型, 指对一个数组的索引取值方法, 如 getValueFromArray(int index) {return this.valueArray[index]; }
  •    绑定类型, 就是PropertyChangeListener了, 就是UI领域应用最广.
  •    约束类型, 就是说 属性改变了,需要对这个属性改变监听的 认可,该属性才可以改变.
  •     与绑定类型区别,就是,绑定是改变后通知,而, 这个是改变前通知,并可否决改变.



你可能感兴趣的:(java,eclipse,UI,Web,Blog)