2011-09-13 22 views
4

在閱讀通過ActionContext.getContext().getSession()獲得會話映射並通過 SessionAware注入之間的差異之後,我想知道哪個是首選方法,爲什麼?我應該通過SessionAware還是ActionContext獲得會話?

該API建議使用SessionAware,我在網上閱讀使用SessionAware使應用程序更容易測試 - 測試唯一的問題?

有人可以詳細說明這個問題或指出解釋這一點的參考?

回答

2

我已經在你以前的問題中回覆過你的問題。你可以使用任何一種方式,甚至可以通過更多方式訪問會話。

單程

Map attibutes = ActionContext.getContext().getSession(); 

但是如果你用這個和你的Action類是直接關係到ActionContext這是Struts2的具體方式。 Struts2的主要目標之一是將Action類與底層HTTP上下文以及其他直接依賴關係分離。 另外編寫普通POJO的測試用例比其他方式更容易和更好。

通過實現SessionAware接口,您可以指示您希望將會話視爲簡單的地圖對象,這不僅使代碼解耦,而且易於維護和測試。

我希望有一個人會來更多的好點這個

+0

在這個答案中,你說第一種方式動作類與struts2特定的類ieActionContext類綁定。在第二種方式中,如果我們爲我們的動作類實現SessionAware接口,那麼動作類也與struts2特定的類即SessionAware綁定。現在的區別在哪裏? – Jagadeesh

+0

@Jagadeesh:當你要去進行單元測試的時候,你可以簡單地在使用ActionContext進行單元測試的時候注入一個地圖並不是那麼容易......還有更多細節......我的建議是檢查文檔,還看看他們兩個,以獲得清晰的想法。 –

+0

感謝您的澄清:) – Jagadeesh

0

SessionAware是一個依賴注入的方式,而ActionContext.getContext().getSession()不是。否則,它們是相同的。這兩種方法都會返回Map<String, Object>而不是作爲servlet API一部分的HttpSession

+0

答案應該回答一些問題,但您的答案不是。他的問題是要知道哪種方法是好的,並瞭解這兩種方法的優點和缺點。如果能以相同的方式回答這個問題,那將是非常好的。 – Jagadeesh

+0

@Jagadeesh我確實提供了一個答案,解釋了這兩種方法有相同的結果,但其中一個遵循依賴注入方法,正如他在他的問題中指出的那樣是首選方法。如果您願意,歡迎提供您自己的答案。 –

相關問題