@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启动扫描注入的时候,一次也就注入进去了。