package com.asual.summer.core.resource.reload;
import com.asual.summer.core.resource.PropertyResource;
import com.asual.summer.core.util.BeanUtils;
public class ReloadingPropertyResource extends PropertyResource{
private ReloadingStrategy reloadingStrategy;
public ReloadingPropertyResource(){
reloadingStrategy = new FileChangedReloadingStrategy();
reloadingStrategy.setPropertyResource(this);
}
@Override
public Object getProperty(String key){
if(reloadingStrategy != null && reloadingStrategy.reloadingRequired()){
performReload();
}
return super.getProperty(key);
}
/**
* @return the reloadingStrategy
*/
public ReloadingStrategy getReloadingStrategy() {
return reloadingStrategy;
}
/**
* @param reloadingStrategy the reloadingStrategy to set
*/
public void setReloadingStrategy(ReloadingStrategy reloadingStrategy) {
this.reloadingStrategy = reloadingStrategy;
this.reloadingStrategy.setPropertyResource(this);
}
private void performReload(){
synchronized (reloadingStrategy) {
super.reloadPropertyPlaceholderConfigurer();
super.postProcessBeanFactory(BeanUtils.getBeanFactory());
reloadingStrategy.reloadingPerformed();
}
}
}