如何使用现有对象作为构造函数参数在spring中实例化bean

时间:2013-03-31 12:20:45

标签: java spring interface javabeans

我有一个现有的对象,实际上是一个套接字,我希望该套接字是我创建的bean的实例变量,即用户会话。

但是如果我从applicationContext获取用户会话作为bean,我如何指定我希望使用现有套接字创建其'socket'属性?

当然,我可以在用户会话bean上使用setSocket方法,并在创建userSession bean之后调用setSocket(socket)。但这会弄乱我的界面,因为实际的类是'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吗?好像我问了一个合理有用的问题..?

1 个答案:

答案 0 :(得分:0)

嗯,在这里回答我自己的问题,但我认为我可以:

  • 定义套接字bean,以便使用自己的套接字bean创建每个用户会话
  • 然后我可以设置套接字bean的socket属性

这样,我就不必在UserSession的接口中创建一个方法,该方法是'setSocket',这是一个实现细节。相反,我有一个Socket接口,方法'setSocket'更有意义。我认为这应该有效。我会回复..

编辑:不,这不起作用,因为我仍然需要在UserSession接口中使用'getSocket'方法来获取套接字bean,以便我可以设置它的套接字。 HMM。