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

1.前言

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

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

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

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

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

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

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

网上 提供的代码截图 :

websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用_第1张图片

 

 使用方法:

websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用_第2张图片

 

 报错结果;

 

 

websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用_第3张图片

 

 

3 .真正的解决办法  :

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

websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用_第4张图片

 

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

测试截图:

websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用_第5张图片

 

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

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

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

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

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

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

 

 

 

 

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

 

你可能感兴趣的:(websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用)