问题

在spring websocket 中使用@Autowired 出现空指针异常

原因

spring管理的都是单例(singleton),和 websocket (多对象)相冲突。websocket在客户端每建立一个链接就会创建一个新的对象,这个对象没有任何的bean注入操作。
项目启动时初始化,会初始化 websocket (非用户连接的),spring 同时会为其注入 service,该对象的 service 不是 null,被成功注入。但是,由于 spring 默认管理的是单例,所以只会注入一次 service。当新用户进入聊天时,系统又会创建一个新的 websocket 对象,这时矛盾出现了:spring 管理的都是单例,不会给第二个 websocket 对象注入 service,所以导致只要是用户连接创建的 websocket 对象,都不能再注入了。

根据以上本以为,只要将注入变量设置为类对象即:
springboot启动的时候注入一个static的对象,使成员变量变为类的变量
即可解决
然后实际操作后发现依旧空指针,经进一步查阅得到得在@ServerEndpoint注解上加上configurator = SpringConfigurator.class,如下:

@ServerEndpoint(value = "/websocket",configurator = SpringConfigurator.class)

同时修改依赖为:
spring-websocket-4.3.8.RELEASE

解决方案

  1. 首先设置注入变量为static,即类变量
  2. 若仍未解决:将@ServerEndpoint(value="/")修改为
@ServerEndpoint(value = "/",configurator = SpringConfigurator.class)

同时检查依赖,应为spring-websocket-4.3.8.RELEASE或以上。

参考:

  • 一贯可乐spring springboot websocket 不能注入( @Autowired ) bean 报 null 错误
  • 解决spring boot websocket无法注入bean的问题
  • ServerEndpoint 无法注入bean的问题

Spring websocket 使用@Autowired 出现null相关推荐

  1. Spring MVC 解读——@Autowired

    2019独角兽企业重金招聘Python工程师标准>>> Spring MVC 解读--@Autowired 一.@Autowired 作为一个Spring开发者对@Autowired ...

  2. spring websocket源码分析续Handler的使用

    1. handler的定义 spring websocket支持的消息有以下几种: 对消息的处理就使用了Handler模式,抽象handler类AbstractWebSocketHandler.jav ...

  3. spring WebSocket详解

    场景 websocket是Html5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式, 解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式, 比如聊天.股票交易. ...

  4. Spring MVC 解读——@Autowired、@Controller、@Service从原理层面来分析

    Spring MVC 解读--@Autowired 一.@Autowired 作为一个Spring开发者对@Autowired注解必定是非常了解了, 顾名思义自动装配,应该是Spring会自动将我们标 ...

  5. spring+websocket综合(springMVC+spring+MyBatis这是SSM框架和websocket集成技术)

    java-websocket该建筑是easy.儿童无用的框架可以在这里下载主线和个人教学好java-websocket计划: Apach Tomcat 8.0.3+MyEclipse+maven+JD ...

  6. Spring Websocket 使用笔记

    前言 现在主流的web容器基本均已支持websocket,但各容器的websocket接口都不尽相同.为了统一websocket实现,便于今后在不同web容器间的移植,这里使用spring webso ...

  7. 基于spring websocket+sockjs实现的长连接请求

    1.前言 页面端通常有需求想要准实时知道后台数据的一个变化情况,比如扫码登录场景,或者跳转到网银支付场景,在旧有的短轮训实现下,通常造成大量的不必要请求和查询,这里基于spring websocket ...

  8. Spring websocket+Stomp+SockJS 实现实时通信 详解

    Spring websocket+Stomp+SockJS 实时通信详解 一.三者之间的关系 Http连接为一次请求(request)一次响应(response),必须为同步调用方式.WebSocke ...

  9. spring websocket性能调优

    由于之前的排版较混乱,现重新整理发布 TProfiler工具 TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点.对象创 ...

最新文章

  1. 生物信息「知识图谱」
  2. JAVA——RSA加密【X509EncodedKeySpec、PKCS8EncodedKeySpec、RSAPublicKeySpec、RSAPrivateKeySpec】
  3. Polynomial(HDU-6668)
  4. 不要打我,不要打我,不要打我啊啊
  5. Java字符串格式化记录
  6. 栈溢出脚本_污点分析挖掘漏洞演示——如何在8小时内从零发现cve20120158(word溢出漏洞)...
  7. AtCoder Grand Contest 018 A
  8. Hadoop大数据原理与应用
  9. [V811双核] 最新昂达V811最新2.0固件ROOT方法
  10. 美团实习面(45min + 35min)
  11. intel和ATT汇编格式区别
  12. Android Room 数据实体类详解
  13. RT-thread应用讲解——FLASH分区
  14. 万春布林和恒瑞医药达成深度战略合作;方达控股、基石药业、天演药业发布最新业绩 | 医药健闻...
  15. MTL框架:模型、权重与融合公式
  16. 什么是事件冒泡机制?
  17. Windows共享上网的详细设置
  18. 锤子Smartisan系统杀后台,推送通知,闲鱼收不到消息或者延迟问题解决
  19. mac如何卸载python2.7_mac python环境的安装与卸载
  20. 多功能超级计算机,联合Fermi与Bulldozer,Cray推出新世代超级计算机XK6

热门文章

  1. Planes, Trains, but not Automobiles-求最小路径覆盖的起点终点
  2. 洛谷P3357:最长k可重线段集问题(网络流)
  3. CF1037H Security(SAM)
  4. AT3968-[AGC025E] Walking on a Tree【构造】
  5. CF1556E-Equilibrium【栈,树状数组】
  6. P5952-[POI2018]水箱【最小生成树】
  7. USACO2.4のP1522-牛的旅行(Cow Tours)【最短路Flody】
  8. 阿里巴巴对Java编程【Mysql】的规约
  9. github详细搜索
  10. 【总结】找到自适合的学习方法