gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:46:35 24 4
gpt4 key购买 nike

我有一个现有的对象,实际上是一个套接字,我希望该套接字成为我创建的 bean(用户 session )的实例变量。

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

当然,我可以在用户 session bean 上使用 setSocket 方法,并在创建 userSession bean 后调用 setSocket(socket)。但这弄乱了我的界面,因为实际的类是“UserSessionImpl”,并且它实现了“UserSession”。套接字是一个实现细节,因此我不想让“setSocket”方法成为 UserSession 接口(interface)的一部分。

我觉得我错过了一些东西..非常感谢您的帮助!

编辑:发布代码的相关部分。

所以我有一段代码返回这样的套接字:

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:否决者可以解释一下否决吗?看来我问了一个合理、有用的问题..?

最佳答案

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

  • 定义一个套接字 bean,以便每个用户 session 都使用自己的套接字 bean 创建
  • 然后我可以设置套接字 bean 的套接字属性
这样,我就不必在 UserSession 的接口(interface)中创建一个方法,该方法表示“setSocket”,这是一个实现细节。相反,我有一个 Socket 接口(interface),其中有一个更有意义的方法“setSocket”。我认为这应该有效。我会回帖..

编辑:不,这不起作用,因为我仍然必须在 UserSession 接口(interface)中使用“getSocket”方法来获取套接字 bean,以便我可以设置其套接字。嗯。

关于java - 如何使用现有对象作为构造函数参数在 spring 中实例化 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15729306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com