在你的websocket中,使用加入以下代码
@ServerEndpoint(value = "/kungfupeng/websocket")
//使用control和compoment效果相同
@Component
public class CustomWebSocket {
private static UserEntityRepository userEntityRepository;
@Autowired
public void setUserService (UserEntityRepository userEntityRepository) {
CustomWebSocket.userEntityRepository = userEntityRepository;
}
}
调用方法如下所示
/**
* 收到客户端消息后调用
*
* @param message
* @param session
*/
@OnMessage
public void onMessage(String message, Session session) throws IOException {
// 调用 repository
UserEntity userEntity = CustomWebSocket.userEntityRepository.findById(1).get();
System.out.println(userEntity.toString());
System.out.println("客户端发送的消息:" + message);
this.session.getBasicRemote().sendText(message.concat("来自服务器的回复"));
}
结合其他的人解决方法,我的理解是socket每次都是一个新实例,autowire仅注入一次,所以才会出现null报错
使用static声明repository,另外通过@Autowire对其进行赋值,将repository成功赋值给类,从而解决此问题。
在Spring Boot的WebSocket应用中遇到Service和Repository无法使用的困境,由于每次WebSocket连接创建的是新实例,导致@Autowired注解无法正常注入。通过静态声明repository并手动使用@Autowire赋值,解决了null报错问题。
2854

被折叠的 条评论
为什么被折叠?



