[英]Are certain access modifiers not allowed for instance variables in java?
[英]Is it allowed to have instance variables in Spring Services?
我有一個提供配置數據的spring服務。 當GUI調用服務時,它會從數據庫加載配置數據。 事實證明,這在渲染單個請求期間經常發生。 我想通過緩存配置數據來優化它。 但是,我不確定這是一個很好的編程風格,還是“允許”在服務中擁有一個實例變量。
以下是我正在考慮的一些示例代碼:
@Serivce("MyConfigService")
public class MyConfigServiceImpl implements MyConfigService {
private Config cachedConfig;
@Override
public Config loadConfig() {
if (cachedConfig != null) {
// load config
cachedConfig = loadedConfig;
}
return cachedConfig;
}
@Override
public saveConfig(Config config) {
cachedConfig = null;
// save the configuration
}
}
具有實例變量(不由spring管理)引入了服務變為線程不安全的可能性。 所以我盡量避免它們,或者確保它們是線程安全的。
您可能需要查看@configurable
和@postconstuct
注釋以實現您的目標。
Spring服務層類中是否允許實例變量? 當然。
在這里使用一個保存對Config
對象的引用是一個好主意嗎?
也許,也許不是。
您沒有顯示Config
通常如何加載...是否將相同的Config
實例返回給所有用戶? 即-當用戶1呼吁saveConfig
然后用戶2調用loadConfig
用戶2獲取Config
對象用戶1保存。
如果是這樣,您應該能夠毫無問題地緩存該值。
此外,您可以使用Spring的基於注釋的緩存 ,而不是自己實現它。
實例變量就是Spring IoC容器的全部內容; 你的設計中可疑的是你在loadConfig
擁有自己的延遲加載邏輯 - 這是你必須通過lazy-init=true
(或類似的,我不記得確切)留給Spring的關注點。 該設計還可能涉及查找方法和可靠的請求范圍的bean。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.