PropertyChangeSupport属性变更监听器
- 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);
}
}