PropertyChangeSupport用法

PropertyChangeSupport属性变更监听器

  1. RefreshScope刷新spring bean遇到问题(详见代码注释) 文档.
@RefreshScope
public class ConfigProperties implements InitializingBean{

    //属性变更监听器
    private PropertyChangeSupport listeners =  new PropertyChangeSupport(this);
	
    /**
     * 必须在构造方法中触发,执行完构造方法才会触发set方法,这样就可以监听到属性的变化。通过refreshScope刷新bean属性。
     * 不能afterPropertiesSet和@PostConstruct方法中触发监听,因为set方法会在注册监听之前触发
     */
    public ConfigProperties() {
    		System.out.println("ConfigProperties invoke");
    		this.addPropertyChangeListener(new PropertyChangeListener() {
			@Override
			public void propertyChange(PropertyChangeEvent evt) {
				System.out.println("ConfigProperties:"+evt.getNewValue()+"----"+evt.getOldValue()+"----"+evt.getSource()+"----"+evt.getPropertyName()+"----"+evt.getPropagationId());
			}
		});
	}
    
    @Override
	public void afterPropertiesSet() throws Exception {
    		System.out.println("afterPropertiesSet invoke");
	}
    
    @PostConstruct
    public void init() {
		System.out.println("@PostConstruct invoke");
    }
    
    @PreDestroy
    public void destroy(){
		this.removePropertyChangeListener(new PropertyChangeListener() {
			@Override
			public void propertyChange(PropertyChangeEvent evt) {
				
			}
		});
    }

	public void setTaxFactory(Map<String, String> taxFactory) {
		listeners.firePropertyChange("taxFactory", this.taxFactory, taxFactory);
		this.taxFactory = taxFactory;
	}

	/**
     * 增加属性变更监听器
     * @param listener
     */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
    		listeners.addPropertyChangeListener(listener);
    }
    
    /**
     * 增加属性变更监听器
     * @param listener
     */
    public void addPropertyChangeListener(String name,PropertyChangeListener listener) {
    		listeners.addPropertyChangeListener(name,listener);
    }
    
    /**
     * 移除属性变更监听器
     * @param listener
     */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
    		listeners.removePropertyChangeListener(listener);
    }

}

转载于:https://my.oschina.net/u/1791774/blog/1619114

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
3.Bound属性 Bound属性是指当该属性的值发生变化时,要通知其他的对象。每次属性值改变时,这种属性就触发一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件传递到其他的Bean,至于接收事件的Bean应该做什么动作由自己定义。也就是说,Bound属性提供了一种机制,即通知监听器一个JavaBean组件的属性发生了改变。监听器实现了PropertyChangeListener接口并接受由JavaBean组件产生的PropertyChangeEvent对象,PropertyChangeEvent对象包括一个属性名字,旧的属性名字,以及每一个监听器可能访问的新属性值。 Bound属性的用法 在程序中要进行触发事件的操作,使用的方法是在PropertyChangeSupport类中。所以该行声明并实例化了一个changes对象,在下面将使用changes的firePropertyChange方法来触发outString的属性改变事件。 通过上面的程序代码,开发工具调用changes的addPropertyChangeListener方法把其他JavaBean注册入outString属性的监听者的队列1中,队列1是一个Vector数组,可存储任何Java对象。开发工具也可使用changes的removePropertyChangeListener方法,从队列1中注销指定的对象,使example3的outString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可以直接调用这两个方法,把其他Java对象与example3挂接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值