A(簡體)版本,我面對的是如下的問題,在Spring MVC應用程序會話bean:Spring MVC的:從兩個不同的會話
兩名球員可以在一場比賽中競爭。該遊戲包括從相同的數據(例如某個國際象棋位置)開始,單獨地玩遊戲(但是同時!),然後比較結果。爲了管理這個,我有:
- 一個處理遊戲的對象(例如,檢查玩家是否準備好,產生開始數據,檢查遊戲是否完成,...)。我們稱之爲'GameHandler',以便於參考。
對於每個玩家,處理遊戲動作的對象(例如移動棋盤上的棋子)。這是一個會話範圍的bean,因爲它包含特定於玩家的狀態信息。稱此爲 'PlayerHandler':
<豆ID = 「playerHandler」 級= 「snip.PlayerHandler」 範圍= 「會話」 > < AOP:作用域代理/ > < /豆>
問題是GameHandler需要對這兩個PlayerHandlers進行回收。但是,由於這是一個代理會話範圍bean,這些引用指向同一個bean,具體取決於我使用哪個會話訪問它。例如。兩名球員,「湯姆」和「傑裏」:
會議湯姆:既playerHandler.getGameHandler().getPlayer1().getName()
和playerHandler.getGameHandler().getPlayer2().getName()
是湯姆 會議傑裏:都是傑裏。
現在,據我瞭解,這是預期的行爲。我的問題是而不是「這是爲什麼」,這是「我該如何解決這個問題」。我發現自己是一個解決辦法是指實際豆,而不是代理,設置在GameHandler引用時:
public void setPlayerOne(PlayerHandler playerHandler) {
try {
while (playerHandler instanceof Advised)
playerHandler = (PlayerHandler) ((Advised) playerHandler).getTargetSource().getTarget();
} catch (Exception e) {
e.printStackTrace();
}
...
但是,我絕不相信這是最好的解決方案。所以我在尋找一些答案:我的設計是否是錯的 - 如果是這樣,你會如何設計?我錯過了一個簡單的解決方案嗎?這是春季限制嗎?
是否只有一個遊戲正在進行或者您是否可以有多對玩家玩不同的遊戲? –
@ bkent314多對必須是可能的。 – Jens