String propertyName, Object oldValue, Object newValue) { PropertyChangeSupport firePropertyChange(String propertyName, int oldValue, int newValue) { PropertyChangeSupport } changeSupport.firePropertyChange(propertyName, oldValue, newValue); } 从上面看 我们还需要去PropertyChangeSupport 中去找 PropertyChangeSupport中的firePropertyChange() 贴代码 public void firePropertyChange(String propertyName
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport java.beans.VetoableChangeSupport; class MyBean { private String name; private int age; private PropertyChangeSupport propertyChangeSupport; private VetoableChangeSupport vetoableChangeSupport; public MyBean() { propertyChangeSupport = new PropertyChangeSupport(this); vetoableChangeSupport = new } public void setAge(int age) { int oldAge = this.age; this.age = age; propertyChangeSupport.firePropertyChange
/10km/article/details/53811946 POJO对象无法被监控 在jface databinding中,将普通的java bean(有get/set方法但没有通过PropertyChangeSupport 解决方案之一就是改造数据对象Person,通过PropertyChangeSupport实现属性监控。 changeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener [注意:这还是个实验项目,使用需谨慎] PojoBindable利用ASM代码动态修改的技术,通过在运行时为POJO对象添加PropertyChangeSupport 的方法并修改setter方法, 凡事都有代价,使用PojoBindable想不修改POJO对象代码就拥有PropertyChangeSupport能力的话,代价是什么呢?
先给出DateBean的类定义 // 具备PropertyChangeSupport支持的JavaBean public class DateBean{ private PropertyChangeSupport support=new PropertyChangeSupport(this); public void addPropertyChangeListener TestComputedValue2 .java package testwb; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport Dialog { private DataBindingContext m_bindingContext; public class DateBean{ private PropertyChangeSupport support=new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener
可以看到,该接口继承了EventListener(空接口)接口,并且只有一个方法propertyChange,该方法的作用就是被监听的对象属性发生变化后触发事件,改方法的实现类去做具体的业务逻辑 二、PropertyChangeSupport import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport int weight;//kg public Person(int weight) { super(); this.weight = weight; } //创建当前对象的事件监听管理器 PropertyChangeSupport listeners = new PropertyChangeSupport(this); public int getWeight() { return weight; } /** * 设置属性的时候触发监听器
propertyChangeSupport = new PropertyChangeSupport(this); public EventManager() { this.propertyChangeSupport.addPropertyChangeListener 类: public class PropertyChangeSupport implements Serializable { private PropertyChangeListenerMap map = new PropertyChangeListenerMap(); public PropertyChangeSupport(Object sourceBean) { 3.优缺点 优点: 实现简单,PropertyChangeSupport封装了监听器容器和对一些复杂操作做了透明化处理 缺点: 需要手动将监听器添加到PropertyChangeSupport维护的容器中 做一下思维发散,我们可以继承PropertyChangeSupport重写fire方法,在这里做多线程异步化。
propertyChangeSupport = new PropertyChangeSupport(this); public EventManager() { this.propertyChangeSupport.addPropertyChangeListener 类: public class PropertyChangeSupport implements Serializable { private PropertyChangeListenerMap map = new PropertyChangeListenerMap(); public PropertyChangeSupport(Object sourceBean) { 3.优缺点 优点: 实现简单,PropertyChangeSupport封装了监听器容器和对一些复杂操作做了透明化处理 缺点: 需要手动将监听器添加到PropertyChangeSupport维护的容器中 做一下思维发散,我们可以继承PropertyChangeSupport重写fire方法,在这里做多线程异步化。
montoyaApi) { this.montoyaApi = montoyaApi; this.logging = montoyaApi.logging(); this.propertyChangeSupport = new PropertyChangeSupport(this); montoyaApi.extension().setName(EXTENSION); logging.logToOutput
虚拟机实例 java 有一对标准的类允许我们这样做——java.beans.PropertyChangeSupport 和 java.beans.PropertyChangeListener。 PropertyChangeSupport 充当一个可以添加和删除观察者的类,并且可以通知他们所有的状态变化。 PropertyChangeListener 是一个接口,我们的代码可以实现该接口以接收已发生的任何更改: PropertyChangeSupport observable = new PropertyChangeSupport
public class AbstractModel implements Serializable{ private PropertyChangeSupport listeners = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener listener)
} /**-------------------- 7.5.3 实现委托属性 ----------------------*/ // 代码清单7.19 使用 PropertyChangeSupport 的工具类 open class PropertyChangeAware { protected val changeSupport = PropertyChangeSupport 提过辅助类来实现属性变化的通知 class ObservableProperty(val propName: String, var propValue: Int, val changeSupport: PropertyChangeSupport ObservableProperty 作为属性委托 // class ObservableProperty2(var propValue: Int, val changeSupport: PropertyChangeSupport
POJO对象进行修改,是不能被绑定的UI组件知道的,在上一篇文章中虽然说到PojoBindable这个项目可以解决这个问题,但这个项目并不成熟,所以我没有采用这个方案,而且如果要改造所有的POJO类支持PropertyChangeSupport 当调用 {@link #setValue(String, Object)}改变对象的属性值时,会自动通知监控对象
*
* 这里将普通的Java bean(有get/set方法但没有通过PropertyChangeSupport
Service 操作的 addService向定义的服务集添加新服务进行分析: // 保存服务的服务集 private Service services[] = new Service[0]; final PropertyChangeSupport support = new PropertyChangeSupport(this); @Override public void addService(Service service) {
<NodeHealthValueBean>(); /** * 运行中标志 */ private volatile boolean runFlag = true; /** * 健康值 PropertyChangeSupport */ protected PropertyChangeSupport listeners = new PropertyChangeSupport(this); public HABalanceJdbcHealthCheckTask
subject.addObserver(new ConcreteObserver()); subject.changeState(1); } } 使用PropertyChangeListener 和 PropertyChangeSupport * 被观察对象 * @author jujun chen * @date 2020/07/26 */ public class DeviceInfo { private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); private int state; //增加监听 public void
String)ois.readObject(); this.numHelperThreads = ois.readInt(); this.pcs = new PropertyChangeSupport