小码问答,有问必答!

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

@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

JavaEE

收藏

1个回答

我要回答

  • author
    牛叔叔 2020-11-29 15:46

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

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

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