小码问答,有问必答!

2020-11-29 15:46

Springboot使用websocket的时候没有注入Bean?

2020-11-29 15:46 回答了这个问题

@ServerEndpoint("/talk/server")
@Component
public class TalkController {


    private TalkService talkService;
    @Resource
    public void setTalkService(TalkService talkService){
        System.out.println("注入talkservice:"+talkService);
        this.talkService = talkService;
    }
}

类似这样,执行也注入了,但是每次链接websocket都显示talkService是null

这个是因为TalkController每次客户端连接都会创建新对象,而后期创建对象并没有从Spring容器中获取,故而talkService 是null

解决方案一个是注入applicationContext,然后代码从applicationContext.getBean()获取service

还有就是可以干脆把talkService改成static,这样SpringBoot启动扫描注入的时候,一次也就注入进去了。

0条评论

我要评论