系統(tǒng)參數(shù)的動態(tài)刷新,只需一個原則:保持類的無狀態(tài)
應(yīng)用系統(tǒng)的開發(fā)經(jīng)常有參數(shù)動態(tài)刷新的問題,一般的方案會比較復雜,其實只要保持一個原則: 保持類的無狀態(tài),那么動態(tài)刷新參數(shù)是一簡很簡單的事情. 舉下面這個例子.
將我們原來的代碼:
//我們有很多類似這樣的UserSerive類,每個類都維護自己的狀態(tài),每個類的屬性都需要動態(tài)刷新
public class UserService {
private String username; //現(xiàn)username為實例屬性,刷新會十分麻煩
public void setUsername(String v) {
this.username = v;
}
public void doSomeThing() {
loadUserDetail(username);
}
}
public class UserService {
private String username; //現(xiàn)username為實例屬性,刷新會十分麻煩
public void setUsername(String v) {
this.username = v;
}
public void doSomeThing() {
loadUserDetail(username);
}
}
username是一個需要更新的系統(tǒng)參數(shù),而UserSerivce存在spring容器中將username變量注入進來。 那么如果username這個參數(shù)需要更改的話會比較麻煩
修改為無狀態(tài)的類:
public class StateLessUserService {
private Properties properties; //該properties為系統(tǒng)全局共享,這樣內(nèi)部進行參數(shù)的刷新,,將會十分方便
public void doSomeThing1() {
//實現(xiàn)1: 全局的properties
loadUserDetail(properties.getProperty("username"));
}
public void doSomeThing2() {
//實現(xiàn)2: 靜態(tài)方法得到配置,由Config統(tǒng)一維護參數(shù)
loadUserDetail(Config.getProperty("username"));
}
}
private Properties properties; //該properties為系統(tǒng)全局共享,這樣內(nèi)部進行參數(shù)的刷新,,將會十分方便
public void doSomeThing1() {
//實現(xiàn)1: 全局的properties
loadUserDetail(properties.getProperty("username"));
}
public void doSomeThing2() {
//實現(xiàn)2: 靜態(tài)方法得到配置,由Config統(tǒng)一維護參數(shù)
loadUserDetail(Config.getProperty("username"));
}
}
如實現(xiàn)2,現(xiàn)我們使用一個統(tǒng)一的Config類得到配置參數(shù),只需要刷新該類,那與username類似的配置參數(shù)都可以立即修改。
如上描述: 只要我們的類無狀態(tài),那么想要動態(tài)刷新參數(shù)是十分簡單的一件事.
再描述一個原則:
既然可以用如此簡單的方法達到我們的目的,為何要搞出那么復雜的方案. (簡單就是美)