一次开发WebSocket时发现无法通过@Autowired注入bean,一直为空。
解决办法:在
@ServerEndpoin中加入以下代码:
//此处是解决无法注入的关键 private static ApplicationContext applicationContext; //你要注入的service或者dao private CDSocketMessageService cdSocketMessageService; public static void setApplicationContext(ApplicationContext applicationContext) { MessageController.applicationContext = applicationContext; }
在使用时:
cdSocketMessageService = applicationContext.getBean(CDSocketMessageService.class);
这样就可以获取到。
同时在启动类中也要加入一些代码
public static void main(String[] args) { SpringApplication.run(DesktopApplication.class, args); }
public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(DesktopApplication.class); ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args); //解决WebSocket不能注入的问题 MessageController.setApplicationContext(configurableApplicationContext); }
以下是完整代码:
package com.mhqy.cloud.desktop.controller.desktop.MessageController; import com.mhqy.cloud.desktop.common.ServerEncoder; import com.mhqy.cloud.desktop.domin.CDSocketMessage; import com.mhqy.cloud.desktop.service.message.CDSocketMessageService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet;