SpringBoot中使用websocket无法自动注入Bean
时间: 2024-03-21 20:42:24 浏览: 81
springboot 集成 webSocket
在SpringBoot中使用Websocket时,如果无法自动注入Bean,可能是因为Websocket是在自己的线程中运行的,而不是在Spring的容器中。可以通过将Bean注册到Spring的应用上下文中,然后使用ApplicationContextAware接口来获取应用上下文的引用,从而在Websocket处理程序中访问Bean。具体步骤如下:
1. 在配置类中注册Bean:
```java
@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
```
2. 实现ApplicationContextAware接口,并在实现类中保存应用上下文引用:
```java
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
context = applicationContext;
}
public static ApplicationContext getContext() {
return context;
}
}
```
3. 在Websocket处理程序中获取Bean:
```java
@Component
public class MyWebsocketHandler extends TextWebSocketHandler {
private MyBean myBean;
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
myBean = ApplicationContextProvider.getContext().getBean(MyBean.class);
}
}
```
这样就可以在Websocket处理程序中使用注入的Bean了。
阅读全文