2009-12-23 22 views
2

我有註釋的這樣一個Seam組件:許多的應用程序的實例範圍的Seam部件

@AutoCreate 
@Name("asyncServiceManager") 
@Scope(ScopeType.APPLICATION) 
public class AsyncServiceManager { 

使用它的類可以這樣來配置:

@In("#{asyncServiceManager}") 
private AsyncServiceManager asyncServiceManager; 

當運行代碼中,我請參閱AsyncServiceManager類在每次使用時都會實例化。正如我使用範圍APPLICATION註釋這個類時,情況並非如此。我需要這個班是一個單身人士。

+0

@raoulsson如果可能,請告訴我們發生了什麼事。你解決了你的問題了嗎? – 2010-01-17 17:57:37

回答

0

縫在行動書上說:

任何部件標記爲應用程序範圍的啓動組件(即,既@Startup和@Scope(ScopeType.APPLICATION)註釋)會自動縫在這個實例時間

所以我認爲@AutoCreate註釋應該被刪除。

Seam使用SeamListener引導@Scope(ScopeType.APPLICATION)標記的組件。

問候,

1

此外,您可以簡單地配置。你不需要這樣的:

@In("#{asyncServiceManager}") 

相反,因爲你的變量名是相同的組件名稱,這足以

@In 
private AsyncServiceManager asyncServiceManager; 

根據您的組件使用的頻率(這是一種優化),你可以將它定義爲一個事件範圍的組件,讓它在觀察事件時自動創建,然後讓它在此之後被銷燬。

Walter

+0

@Walter White嗨Walter,不要忘記在不使用創建屬性的情況下使用@In的情況下,如果Seam組件不存在,Seam組件不會創建Seam組件。但是,當使用Raul @In(#{asyncServiceManager})使用的表達式語言(查找和創建選項)時,Seam會創建一個,如果它不存在。 (+1)用於命名約定 – 2010-01-17 17:54:08

相關問題