java - 如何在不创建对它的引用的情况下实例化会话范围的 bean?
问题描述
我有一个 websocket 范围的 bean,每次创建新会话时都会做一些事情。问题是这个bean使用了一些可观察的处理程序,它没有被直接调用,所以这个bean永远不会被实例化。
如何在不直接访问它的情况下实例化 websocket 范围的 bean?
解决方案
我的解决方案:
创建要在要初始化的组件上使用的接口:
public interface WebSocketSessionPrematureInitialization {
default void initialize() {}
}
创建一个组件来初始化所有实现该接口的组件:
@Component
@Scope(scopeName = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class WebSocketBeanInitializer {
private final List<? extends WebSocketSessionPrematureInitialization> wsInit;
@Autowired
public WebSocketBeanInitializer(List<? extends WebSocketSessionPrematureInitialization> wsInit) {
this.wsInit = wsInit;
}
public void initialize() {
for (WebSocketSessionPrematureInitialization bean : wsInit)
bean.initialize();
}
}
现在你只需要调用 WebSocketBeanInitializer 的 initialize() 方法就可以创建一个新的会话。
推荐阅读
- r - 增加 str_sub 中的 end 参数,直到我们在数据框中获得唯一值
- karate - 遍历动态数组并在下一个请求中重用值
- c# - Start-Service 未返回有关失败的足够信息
- anypoint-studio - 尝试反序列化会话但未指定签名验证密钥
- azure - 在 Azure DevOps Pipeline 中为 Visual Studio 测试任务设置应用设置
- javascript - 递归自动增量功能无法解析
- javascript - @click 事件中的问题,该事件添加了一个 fontawesome 图标
- php - 如何使用 brozot / Laravel-FCM 在推送通知上添加图像
- nginx - 如何路由到不同的服务器和命名空间
- python - 为什么我的python脚本输出文件为空