我有一个现有的对象,实际上是一个套接字,并且我希望该套接字成为我创建的 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 吗?好像我问了一个合理的,有用的问题..?