2012-07-17 49 views
0

我參與了一個jsp/servlet應用程序。應用程序存儲會話或請求中所需的對象。但是同一個對象可以注入到多個位置的會話或請求中。換句話說,而不是寫在jsp,servlet中管理bean的設計模式

HomeBean homeBean = (HomeBean) request.getSession(false).getAttribute("homeBean"); 

,我會寫

HomeBean homeBean = BeanStore.getHomeBean(); 

我得太多我還是超安全標準設計?

+0

看到這很有趣,因爲你是Ender,談論Bean。 – 2012-07-17 21:26:07

+0

靜態'BeanStore'實現如何解決問題? – 2012-07-17 21:27:37

+0

錯誤示例BeanStore.getCurrentInstance()。getHomeBean ... BeanStore是線程本地的並在過濾器中創建。 – 2012-07-17 21:37:48

回答

1

在像您可以直接注入會話,甚至一些會話屬性的業務組件一些框架,像:

@Inject 
private HomeBean homeBean; 

此外,而不是污染與HTTP會話訪問代碼的代碼只是獲取對象一次並在需要時傳遞它。這將使閱讀和測試更容易。

請注意,如果您真的不想直接通過HttpSession,那麼您的BeanStore.getHomeBean()確實難以正確書寫。 Servlet過濾器和ThreadLocal,我來了!更何況我發現這樣的靜態「工廠」相當醜陋。


側面說明,在:

request.getSession(false).getAttribute("homeBean") 

request.getSession(false)會經常回null,離開你討厭NullPointerException。在這種情況下,最好選擇true或者根本沒有參數。

+0

感謝您的建議。架構師不希望我使用spring,jsf或任何其他框架,所以我堅持爲自己實現一些東西。我正在考慮使用ThreadLocal,因爲我已經有了這樣一個對象。 – 2012-07-17 21:40:41