SpringBoot1.X /2.X使用@Component注解注入为java.lang.NullPointException 问题小结
问题简述:
我们在使用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> T getEndpointInstance(Class<T> 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
SpringBoot1.X /2.X使用@Component注解注入为java.lang.NullPointException 问题小结的更多相关文章
- spring3.2.0与mybatis3.2.7整合出错--Failed to read candidate component class--nested exception is java.lang.IllegalArgumentException
错误信息如下: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate com ...
- 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)
想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...
- spring boot: EL和资源 (一般注入说明(二) @Service注解 @Component注解)
@Service用于标注业务层组件 : 将当前类注册为spring的Bean @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即 ...
- Spring Boot Service注入为null mapper注入为null @Component注解下@Value获取不到值 WebsocketServer类里无法注入service
最近搞了一下websocket前台(这个网上有很多的教程这里就不班门弄斧啦) 以及前后台的交互 和后台的bug(搞了两天) 也是状态频发 bug不断 下面说一说问题. Websocket主类里面无法注 ...
- Spring中@Component注解,@Controller注解详解
在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.S ...
- 静态工具类中使用注解注入service
转载:http://blog.csdn.net/p793049488/article/details/37819121 一般需要在一个工具类中使用@Autowired 注解注入一个service.但是 ...
- Spring 3.0 注解注入详解
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- spring注解注入:<context:component-scan>使用说明
spring从2.5版本开始支持注解注入,注解注入可以省去很多的xml配置工作.由于注解是写入java代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入. 在XML中配置了 ...
随机推荐
- ABP JTable如何显示序列号
显示序列号 recordsLoaded: function (event, data) { var SrNo = 0; if (data.records) { $.each(data.records, ...
- 提高js性能的方法
1.文档瘦身 (1)删除注释(版权及法律声明部分应保留),运行时不需要注释. (2)删除制表符.空格和换行符,这些只是为了便于程序的维护,但是与执行无关. (3)替换长的变量名为短的变量名. (4)使 ...
- Mybatis实现if trim(四)
1. 准备 请先完成Mybatis实现增删改查(二)和Mybatis实现条件查询(三)的基本内容 2. 关于多条件查询的疑问 在Mybatis实现条件查询(三)中我们实现了多条件(商品编码.商品名称. ...
- Thread--使用condition实现顺序执行
package condition; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Re ...
- 增删改查(简单版&连接数据库)
这个博客也是补充之前的学习内容: 项目总述:这个增删改查我以,选课名称,选课教室,选课教师基本信息,作为主要的信息来源.主要对这些信息最基本的增删改查 详细的分析与说明: 1.首先在src文件里定义四 ...
- 关于Java编码规范
一.尽量使用卫语句 卫语句概念 条件表达式通常有两种表现形式,第一种形式是:所有分支都属于正常行为:第二种形式则是:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况.这两类条件表达式有不 ...
- Linux(CENTOS7) RabbitMq安装
RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...
- C#压缩解压zip 文件
/// <summary> /// Zip 压缩文件 /// </summary> public class Zip { public Zip() { } #region 加压 ...
- bugs开发异常解决方法
1. 前提 第一层:遇到异常首先必须告诉自己,冷静,不要慌.(一看到Bug就心慌,那么就不能释放必杀技) 2. 入门级 第二层:遇到Bug,第一潜意识看输出异常的信息的(控制台输出 ...
- 后台用Hbase对表单数据实现增删改查遇到的问题
1.无法解析jsp 原因:hbase中lib下jar包会与tomcat包冲突,需要删除与tomcat冲突的包 这是我删除的几个包 之后运行就没有问题了 2.对于Hbase修改的问题 在添加数据时,HB ...