2015-12-21 65 views
1

在我們的應用程序中,我們通常會使用一些應用程序範圍內的資源(實用程序),例如可能是apache HttpClient,或者我的例子ConcurrencyUtils,它是一個管理所有針對cpu密集的線程池和io任務(爲反應流添加了一些調度器......大量的自定義內容)。彈簧初始化和釋放全局資源

現在,當我初始化我的上下文低谷春天,我必須做一些不自然這樣的(爲了初始化和銷燬​​靜態資源)

enter image description here

注意ConcurrencyUtil僅僅是一個假類沒有用,我們從來沒有使用它,但我們使用ConcurrencyUtils的靜態方法,這個類只確保調用init和destroy(並且我不確定如何確保在所有bean被銷燬後調用destroy)...

enter image description here

那麼我們如何在spring上下文創建任何bean之前運行一段代碼,並且在Spring上下文釋放了它的所有bean之後(並且本身可以回收)?

什麼是彈簧初始化和釋放靜態資源的正確方法?

+0

請將圖片轉換爲文字。 – Maroun

+0

你不能看到那些?我認爲圖像更好,當人們不會實際複製粘貼代碼(當例子很簡單,相似) – vach

+0

我可以看到它們。但是如果有人想複製粘貼代碼以幫助你呢?我們也不想用代碼圖像污染這個地方。 – Maroun

回答

2

這可能工作正常。你也可以把這個一類是在獲取豆掃描類路徑:

@Configuration 
public class ConcurrencyConfig { 

    @PostConstruct 
    public void init(){ 
     ConcurrencyUtil.init(); 
    } 

    @PreDestroy 
    public void destroy(){ 
     ConcurrencyUtil.destroy(); 
    } 
} 

看起來更好一點我猜。

+0

謝謝,這正是我想要的,我想@PostConstruct將在創建所有bean之後運行,但實際上它之前運行:) – vach

+0

它僅在創建包含bean後運行,因此在此情況下創建ConcurrencyUtil時。 – Wouter