SpringBoot整合websocket的类中无法自动注入redisTemplate
时间: 2024-03-21 16:42:33 浏览: 102
在SpringBoot整合WebSocket时,如果WebSocket处理程序类中无法自动注入redisTemplate,可能是因为WebSocket处理程序类是在WebSocket配置类之外被创建的,无法被Spring容器管理。可以通过以下几种方式解决:
1. 将WebSocket处理程序类放到WebSocket配置类中,这样WebSocket处理程序类会被Spring容器管理。
2. 将WebSocket处理程序类标记为@Component或@Service,并在WebSocket配置类中使用@ComponentScan或@ServiceScan扫描包。
3. 在WebSocket配置类中手动创建WebSocket处理程序对象,并注入需要的Bean。示例代码如下:
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
private RedisTemplate<String, String> redisTemplate;
@Autowired
public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
MyWebSocketHandler myWebSocketHandler = new MyWebSocketHandler();
myWebSocketHandler.setRedisTemplate(redisTemplate);
registry.addHandler(myWebSocketHandler, "/websocket").setAllowedOrigins("*");
}
}
```
在这个示例中,手动创建了MyWebSocketHandler对象,并在其中注入了RedisTemplate对象。然后将MyWebSocketHandler对象注册到WebSocketHandlerRegistry中,这样就可以在WebSocket处理程序中使用注入的RedisTemplate对象了。
阅读全文