项目场景:
系统平台需要启动一个websocket用于设备上报数据,websocket接受消息需要解码并保存进数据库。
问题描述
在websocket启动后无法正常依赖注入,webSocket进行连接传递信息时,需要对多个客户端创建多个实例,而spring默认为单例模式,只有在遇到@Component注解时,会进行一次实例化,而之后服务器为客户端创建的实例中,spring不会进行依赖注入,因此变量为null。
解决方案:
手动获取bean
//通过applicationContext 手动获取bean
protected static ApplicationContext applicationContext;
private static IFreezingDataService freezingDataService;
......
freezingDataService= applicationContext.getBean(FreezingDataServiceImpl.class);
利用setter依赖注入
// 将依赖静态
private static IFreezingDataService freezingDataService;
// 注入时静态获取
@Autowired
public void setFreezingDataService(IFreezingDataService freezingDataService) {
ShowMsg.freezingDataService = freezingDataService;
}