1.在socket类内添加静态属性以及方法
private static ApplicationContext applicationContext;
public static void setApplicationContext(ApplicationContext context) {
applicationContext = context;
}
2.将启动类修改成这样
public class MbKeyApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(MbKeyApplication.class, args);
WebSocketServer.setApplicationContext(applicationContext);
//SpringApplication.run(MbKeyApplication.class,args);
log.info("服务启动成功");
}
}
3. 在你的业务方法上用创建的静态属性获取service的类对象就可以使用啦
KeyMsgService bean = applicationContext.getBean(KeyMsgService.class);
例如:
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session, @PathParam("username") String username) {
sessionMap.put(username, session);
log.info("有新用户加入,username={}, 当前在线人数为:{}", username, sessionMap.size());
KeyMsgService bean = applicationContext.getBean(KeyMsgService.class);
}
总结:获取到启动类返回的对象并把它赋值给socket的静态属性applicationContext,即可使用此对象调用类方法。
(小白不懂原理,请大神指教!)