springboot中websocket 无法注入bean
首先要在websocket 中设置关键,下图@ServerEndpoint("/websocket/{sid}")@Componentpublic class WebSocketServer {private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);//静态变量,用来...
·
首先要在websocket 中设置关键,下图
@ServerEndpoint("/websocket/{sid}")
@Component
public class WebSocketServer {
private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
//接收sid
private String sid = "";
//====================这段是关键=======================
//容器
private static ApplicationContext applicationContext;
//你要注入的service或者dao
private UserMapper userMapper;
private xxxxMapper xxxxeMapper;
private xxxxMapper xxxxMapper;
//容器的构造方法
public static void setApplicationContext(ApplicationContext applicationContext) {
WebSocketServer.applicationContext = applicationContext;
}
//====================这段是关键=======================
修改Application 启动类
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
//这段是关键的。在启动时给websocket的ApplicationContext容器注入
WebSocketServer.setApplicationContext(context);
}
}
在websocket中修改链接时触发的方法
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session, @PathParam("sid") String sid) {
log.info(sid+"链接成功");
this.session = session;
webSocketSet.add(this); //加入set中
addOnlineCount(); //在线数加1
log.info(sid+"链接成功"+":当前在线人数"+getOnlineCount());
this.sid = sid;
//这段是关键的 给上面定义的私有属性赋值,就成功注入了
//需要注入几个就写几个
userMapper= applicationContext.getBean(UserMapper.class);
xxxxMapper = applicationContext.getBean(xxxxMapper.class);
xxxxMapper = applicationContext.getBean(xxxxMapper.class);
try {
sendMessage("连接成功");
} catch (IOException e) {
log.error("websocket IO异常");
}
}
具体流程:
项目启动时,将项目本身的所有bean对象赋值给websocket的 applicationcontext,在用户链接websocket的时候,调用链接时触发的方法,从applicationcontext中取到想要注册的bean的对象,赋值给定义的变量
大功告成!

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)