博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot1.X /2.X使用@Component注解注入为java.lang.NullPointException 问题小结
阅读量:5022 次
发布时间:2019-06-12

本文共 1771 字,大约阅读时间需要 5 分钟。

问题简述:

  我们在使用Spring系的产品的时候总是想当然的以为所有指定的Bean都会让Spring来管理,其实不然,即使是Spring出品的产品也不全是的哦,以下是我遇到的一个使用@Component注解修饰的实体,在正常使用的时候报的空指针异常;我使用的是基于SpringWebsocket组件,

目的就是当多线程任务在第一阶段完成以后向用户推送数据.贴上代码:

  调用类:

  

实现类:

正常情况是直接就可以使用的,但是呢,遇到了初学时遇到的最多的空指针异常.然后按照正常思路一路捣鼓,什么配置@ComponentScan注解啊 SpringBoot启动类位置啊,静态注入啊等一系列手段,结果然并卵.然后网上一阵搜索,结果都没有正确的解决方案,最后搭梯子去Google,然后在一个大神的博客里发现了端倪.然后了解到在使用SpringWebsocket的时候,Websocket的对象托管是放在ServerEndpointConfig.Configurator类里面的,然后就有了解决方案.直接上代码:

public class EndpointConfigure extends ServerEndpointConfig.Configurator implements ApplicationContextAware {
private static volatile BeanFactory context; @Override public
T getEndpointInstance(Class
clazz) throws InstantiationException {
return context.getBean(clazz); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
EndpointConfigure.context = applicationContext; } }

 

大致原理就是 在使用Websocket组件托管对象中调用Spring托管对象的时候,因为是不同的容器,那就依据这个配置文件,将Spring托管的对象放到ServerEndpointConfig中,然后实例化EndpointConfigure对象到配置中,然后就可以调用了.是不是觉得很简单.但是就是相信了SpringWebSocket组件这个"Spring"字样的邪, 最后在SpringWebsocket的官方说明文档上也找到了相关的说明,哎,不说了,我心里有很多羊驼在发怒. 注意:   以上解决方案只针对使用SpringWebsocket组件时遇到的空指针注入现象.   其他的Spring系项目注入空指针,请按照以下步骤检查:   1. 配置@Componentscan注解.(其实在绝大多数的时候是不需要的,因为默认是全包扫描.包含Service controller Component)   2. 检查SpringBoot启动类的位置(这个检查一般是针对要扫描其它依赖Jar包的配置,要将启动类的位置放到具有相同包名的下面,     例如: com.baidu.server, com.baidu.website  如果启动类在website目录下面,但是你想将com.baidu.server下面的指定位置的Bean放到当前项目中,那就将启动类移动到com.baidu下面,然后在Componentscan注解中配置一下就好了)   3. 当遇到的问题百度前5项(排除广告)没有你想要的答案,果断用梯子去Google一下,绝对超乎想象的好使. 当前环境:   SpringBoot 2.1.X   spring-boot-starter-websocket   HiveJDBC
 

转载于:https://www.cnblogs.com/Miss-li/p/10830243.html

你可能感兴趣的文章
序列的增量赋值(+=、*=)
查看>>
映射的弹性键查询
查看>>
用bisect来管理已排序的序列
查看>>
文本和字节序列
查看>>
数组、内存视图、双向队列
查看>>
元组用法
查看>>
java8特性
查看>>
java8学习
查看>>
linux常用命令
查看>>
window操作系统分区
查看>>
[BZOJ4827][Hnoi2017]礼物(FFT)
查看>>
关于我&留言板
查看>>
9.20开始的停课日常
查看>>
Speed
查看>>
ASP.NET Core 3.0 原生DI拓展实现IocManager
查看>>
redis数据结构总结
查看>>
[WPF自定义控件库]了解WPF的布局过程,并利用Measure为Expander添加动画
查看>>
[WPF自定义控件库] 给WPF一个HyperlinkButton
查看>>
重温《单元测试的艺术》,总结常用知识点
查看>>
[WPF自定义控件库]自定义Expander
查看>>