美文网首页
springboot websocket 排错记录

springboot websocket 排错记录

作者: 无我_a50f | 来源:发表于2020-10-28 11:37 被阅读0次

错误详细信息:

Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com....websocket.WebSocketServer]: Constructor threw exception; nested exception is java.lang.NullPointerException
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.cloudwise.isop.messagecenter.config.websocket.WebSocketServer]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1295)
    ... 25 more
Caused by: java.lang.NullPointerException
    at com.cloudwise.isop.messagecenter.config.websocket.WebSocketServer.<init>(WebSocketServer.java:33)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172)

关键信息:

com.cloudwise.isop.messagecenter.config.websocket.WebSocketServer.<init>(WebSocketServer.java:33)

这块代码:

private final RedisUtil redisUtil = SpringContextUtil.getApplicationContext().getBean(RedisUtil.class);

很明显 SpringContextUtil.getApplicationContext() 报空指针
追踪代码到 SpringContextUtil 类

@Component
public class SpringContextUtil implements ApplicationContextAware {
    /***
     * Spring应用上下文环境
     */
    private static ApplicationContext applicationContext;

    /**
     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtil.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过class获取Bean
     **/
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
}

推测:调用 getApplicationContext() 时, applicationContext 未初始化
打上日志发现:
getApplicationContext() 时, setApplicationContext() 尚未触发,结果导致 applicationContext 为 null
查询 ApplicationContextAware 类的使用方法
-- 当springboot 容器启动成功后会 setApplicationContext()
但我们调用 getApplicationContext() 在 Bean 初始化的时候,显然此时 setApplicationContext() 尚未执行, 不能在初始化的时候调用 getApplicationContext()

相关文章

网友评论

      本文标题:springboot websocket 排错记录

      本文链接:https://www.haomeiwen.com/subject/ltpqvktx.html