websocket连接mysql_websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用...

本文记录了在WebSocket中遇到的空指针异常问题,由于WebSocket每次连接相当于新建对象,导致@Autowired无法正常注入Service层。通过实现ApplicationContextAware接口解决问题,但发现直接使用ServiceImpl类或字符串key获取Bean会报错。最终解决方案是利用ContextLoader.getCurrentWebApplicationContext().getBean()方法,传入Service接口的class作为key,成功实现WebSocket与数据库交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

描述一下今天用websocket踩得坑  ---》空指针异常!

我想在websocket里面使用service 层的接口,从中获取数据库的一些信息  ,

使用 @Autowired 注解 接口  ,报错 空指针异常  !!!

查过资料才发现 ,websocket 无法使用注解注入bean ,因为每一次websocket的握手连接就像是new了一个对象,对是全新的

2.网上查找的代码 测试无法使用,截图留下笔记

然后去百度 博客 寻找解决答案  ,基本都是要重写  ApplicationContextAware 接口的方法  ,

测试发现仍然报空指针异常,抓取异常内容甚至为空找不到异常原因。。。

网上 提供的代码截图 :

2899c7548a6ba4fb4fff2856009ff197.png

使用方法:

6df4ac0da1655e1f9ae2cb65a7b818b8.png

报错结果;

80258e15252581d9ff36c658f085abba.png

3 .真正的解决办法  :

使用 ContextLoader.getCurrentWebApplicationContext().getBean( 【服务名称.class】);  即可

69e55db6e9772c380a2474eadb0e9eee.png

就这么简单,效率还高 !!!

测试截图:

a73fb1fa7c824ba917c3f52453e91142.png

但是有一个注意的地方,经过测试  这里的 getbean()方法里面只能使用 service的接口名,并且以 【 service名称.class 】 为key才可以, 无法使用  【serviceImpl.class】

并且  字符串 key也无法使用  【“service”】 【 “serviceImpl” 】都不能使用

原因不知道  ,百度 、博客都找不到关于这个的资料  ,以此为记录!

-------------------------

幸好 ,可以正常使用  ,感动的要哭

-------------------------

这得感谢一位博主的知识分享  ,原址  :https://blog.youkuaiyun.com/kxj19980524/article/details/85108047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值