2013-03-31 22 views
1

我有一個現有對象,實際上是一個套接字,並且我希望該套接字是我創建的一個用戶會話的一個實例變量。我如何在彈簧中使用現有對象作爲構造函數參數實例化一個bean

但是,如果我從applicationContext獲取用戶會話作爲bean,我如何指定我希望使用現有套接字創建其'套接字'屬性?

當然,我可以在用戶會話bean上使用setSocket方法,並在創建userSession bean後調用setSocket(套接字)。但是這弄亂了我的接口,因爲實際的類是'UserSessionImpl',它實現了'UserSession'。套接字是一個實現細節,所以我不想讓'setSocket'方法成爲UserSession接口的一部分。

我覺得我失去了一些東西..非常感謝您的幫助!

編輯:發佈代碼的相關部分。

所以我有一段代碼返回這樣的插座:

while (true) { 
    Socket socket = server.accept(); 
    UserSession userSession = (UserSession)applicationContext.getBean("userSession"); 

    // Without spring I would do this 
    //UserSession userSession = new UserSessionImpl(socket); 
    executorService.execute(userSession); 
} 

我Spring的ApplicationContext中沒有什麼令人興奮的 - 我只是

<bean id="userSession" class="server.UserSessionImpl" scope="prototype"></bean> 

EDIT2:在downvoter可以解釋downvote ?似乎我問了一個合理的,有用的問題..?

+0

你可以發佈一些代碼或你的'spring.xml'文件的一部分嗎? – austin

回答

0

嗯,這裏回答我的問題,但我認爲我可以:

  • 定義一個插座豆,讓每一個用戶會話被其自己的套接字的bean創建
  • 然後我可以設置套接字bean的套接字屬性

這樣,我不必在UserSession的接口中創建一個說'setSocket'的方法,它是一個實現細節。相反,我有一個Socket接口,使用'setSocket'方法更有意義。我認爲這應該工作。我會回發..

編輯:不,這是行不通的,因爲我仍然必須在UserSession接口中有一個'getSocket'方法,用於獲取套接字bean,因此我可以設置其套接字。嗯。

相關問題