当前位置: 首页 > news >正文

Websocket @ServerEndpoint不能注入@Autowired

在websocket中使用@ServerEndpoint无法注入@Autowired、@Value

问题分析

Spring管理采用单例模式(singleton),而 WebSocket 是多对象的,即每个客户端对应后台的一个 WebSocket 对象,也可以理解成 new 了一个 WebSocket,这样当然是不能获得自动注入的对象了,因为这两者刚好冲突。

@Autowired 注解注入对象操作是在启动时执行的,而不是在使用时,而 WebSocket 是只有连接使用时才实例化对象,且有多个连接就有多个对象。

所以我们可以得出结论,这个 Service 根本就没有注入到 WebSocket 当中。

使用static静态变量

读取nacos的配置,通过Environment来获取,必须使用static,将需要注入的 Service 改为静态,让它属于当前类,然后通过 set方法进行注入即可解决。
环境变量注入

private static Environment environment;
@Autowired
private void setEnvironment(Environment environment){WebSocketServer.environment = environment;
}

在连接websocket的时候获取nacos的字段值

@OnOpen
public void onOpen(Session session, @PathParam(value = "userId") String userId) {try {token = environment.getProperty("platform.login.token");String stationIDStr = environment.getProperty("platform.station.id");if (StrUtil.isEmptyIfStr(stationIDStr)){stationId = 1;}else {stationId = Integer.valueOf(stationIDStr);}this.session = session;this.userId = userId;webSockets.add(this);sessionPool.put(userId, session);log.info("[websocket消息]有新的连接,总数为:" + webSockets.size());} catch (Exception e) {}
}
http://www.lryc.cn/news/218235.html

相关文章:

  • Unity热更新
  • 如何用维格云搭建和一键训练你的钧瓷AI机器人?
  • 整理的一些Java细节问题
  • 初识AUTOSAR网络管理
  • Flink SQL Hive Connector使用场景
  • 【Docker】联合探讨Docker:容器化技术的革命性应用
  • dirhunt使用手册,中文版
  • 【从0到1设计一个网关】如何设计一个稳定的网关?
  • chromedp库编写程序
  • pngquant failed to build, make sure that libpng-dev is installed 问题
  • 进程控制(二):进程等待
  • SWAT-MODFLOW地表水与地下水耦合模型的建模及应用
  • 使用navicat操纵数据库
  • websocket入门
  • Word里MathType插件符号表消失了
  • 利用MySQL玩转数据分析之基础篇
  • 【ML】分类问题
  • python @classmethod装饰器作用 与 使用 类方法 实例方法
  • layui form 中input输入框长度的统一设置
  • 【WSL/WSL 2-Redis】解决Windows无法安装WSL Ubuntu子系统与Redis安装
  • 数据结构(四)--队列及面试常考的算法
  • PMIC、电源管理MAX77646ANP、MAX77647AANP、MAX77675AEWE、MAX77847AEWL DC-DC 开关稳压器
  • 5W2H分析法:全面思考和解决问题的实用工具
  • 01 向量基本概念
  • QMS质量检验管理|攻克制造企业质量检验难题,助力企业提质增效
  • Visual Components Robotics OLP解决方案 北京衡祖
  • React——简便获取经纬度信息
  • 如何修改设置360浏览器内核模式
  • spring boot 定时任务@Scheduled(cron = ““)不可用时并且注入失败时——笔记
  • R语言用jsonlite库写的一个图片爬虫