我有一个现有的对象,实际上是一个套接字,我希望该套接字是我创建的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吗?好像我问了一个合理有用的问题..?
答案 0 :(得分:0)
这样,我就不必在UserSession的接口中创建一个方法,该方法是'setSocket',这是一个实现细节。相反,我有一个Socket接口,方法'setSocket'更有意义。我认为这应该有效。我会回复..
编辑:不,这不起作用,因为我仍然需要在UserSession接口中使用'getSocket'方法来获取套接字bean,以便我可以设置它的套接字。 HMM。