1

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

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

当然,我可以在用户会话 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 吗?好像我问了一个合理的,有用的问题..?

4

1 回答 1

0

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

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

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

编辑:不,这不起作用,因为我仍然必须在 UserSession 接口中有一个“getSocket”方法,用于获取套接字 bean,以便我可以设置它的套接字。唔。

于 2013-03-31T12:37:14.427 回答