使用WebSocket进行依赖注入为null的解决办法

2022-07-04  本文已影响0人  守护浪漫的小香樟

使用WebSocket进行依赖注入为null的解决办法

前阵子写了利用websocket和移动端进行通信的内容,现在想要把通信过程中的会话信息通过业务存储到数据库中,需要整合Websocket,@ServerEndpoint注解所标注的类,类似于我们写的@Controller标注的Controller层,

结果@Autowire注入的Service层的bean为null,然后检查配置,各种姿势测试这个bean,发现和

@ServerEndpoint有关。先看代码

你要用 @ServerEndpoint实现ws,就注定不能用@Autowired注入bean,那咋整?new一个?肯定不行。思来想去,你不就是要个bean么,我@Autowired把你召唤不出来,那我拿spring上下文把你getBean(“name”)一下如何,那么问题又来了,容器启动的时候spring上下文已经加载了,怎样拿到这个上下文?

拿到上下文就好说了,直接getBean就OK。

getBean

@Component

public class SpringContextUtilimplements ApplicationContextAware {

/**

*  Spring应用上下文环境

*/

    private static ApplicationContextapplicationContext;

/**

* 实现ApplicationContextAware接口的回调方法,设置上下文环境

*/

    @Override

    public void setApplicationContext(ApplicationContext applicationContext)

throws BeansException {

SpringContextUtil.applicationContext = applicationContext;

}

public static ApplicationContext getApplicationContext() {

return applicationContext;

}

/**

* 获取对象 这里重写了bean方法,起主要作用

*/

    public static Object getBean(String beanId)throws BeansException {

return applicationContext.getBean(beanId);

}

}

上一篇下一篇

猜你喜欢

热点阅读