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);
    }

}

猜你喜欢

转载自my.oschina.net/u/1791774/blog/1619114