2012-06-13 19 views
0

我正在使用幾個SFSB實現相同接口的應用程序。刪除後的SFSB調用

要在運行時決定,whiche具體落實使用,我有以下工廠方法:

@SuppressWarnings("rawtypes") 
@Inject @Any Instance<SFSBInterface> sfsbSource; 

public <T> SFSBInterface<T> initBeanForm(Class<T> clazz, Class<? extends SFSBInterface<T>> sfsbClass, Annotation... qualifiers) { 
    SFSBInterface<T> sfsb = sfsbSource.select(sfsbClass, qualifiers).get(); 
    return sfsb; 
} 

每一個具體的實施確實有@Remove批註的方法實現的。現在我有一個案例,我想要刪除此sfsb並獲取調用此方法的新實例。

我調用remove方法並刪除對這個對象的所有引用,但實例一直在內存中。當我現在要求這個類的一個實例時,我得到了同樣的實例,爲此我稱之爲刪除。

我的問題是:

  1. 難道我遇到的問題,如果我用這個例子,對此我叫 remove方法?
  2. 被刪除的實例保留在 內存中是否正常?
  3. 如何有效移除此實例?
  4. 我如何獲得 我班的真實新實例?

親切的問候 基督教

BTW:我使用JBoss 7.1.1和焊接

回答

0

當我現在問這個類的一個實例,我收到了同樣的 例如,我之前稱之爲刪除。

我會說這種行爲超出了規範,因此非常依賴供應商。新的bean可以從一些舊實例中獲取(這似乎就是這種情況)或者新創建。這個策略可以(理論上)隨着你的應用服務器的新版本而改變,甚至更糟糕:從環境到環境。

一箇中心問題是你如何確定它是一個「新實例」?

我認爲,如果你能夠忍受它或者不能容易回答。

你應該做的下一步是檢查新bean的生命週期鉤子。如果一切都被調用,並且所有依賴項都被正確注入,它看起來相當不錯。

否則隨時更新的問題:)