2011-04-29 88 views
1

以我Web JSF應用程序,我顯示使用這種方法給用戶的不同消息:是靜態方法嗎?

private void showErrorMessage(final String message) { 
    FacesContext.getCurrentInstance().addMessage(null, 
      new FacesMessage(message)); 
} 

,是在位於這需要以某種方式來警告用戶的每個豆。

現在,我想申請DRY規則,並使這個showErrorMessage方法是一個靜態的靜態類,但我不知道這是否會是安全的......我的意思是靜態方法VS實例基於會話的面孔背景,這能產生衝突嗎?

謝謝。

回答

1

靜態方法在使用可從外部更改的可變變量時不安全。例如。

private static String foo; // +getter +setter 

public static void foo() { 
    // Do something with foo. 
} 

這不是線程安全的。當其他線程更改foo而當前線程在foo()內時,可能會發生爭用情況。但是,您不使用任何外部可變變量。一切都被聲明和使用methodlocal/threadlocal。所以它很安全。

2

我不太清楚當前實例是如何返回的,但我敢打賭一個ThreadLocal被使用,因此你應該罰款一個靜態方法。對於現有的靜態getCurrentInstance()方法調用來說,這基本上只是一種方便的方法。

1

這種特殊的靜態方法非常安全。

getCurrentInstance()返回線程本地的FacesContext對象。 FacesContext封裝了與當前線程正在處理的請求相關的狀態。另一個線程將處理不同的請求,並將獲得不同的FacesContext實例。