簡體   English   中英

是否允許在Spring Services中包含實例變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM