在我们使用websocket时 在websocket 的实例里面 注入service 会为null
spring管理的都是单例(singleton),和 websocket (多对象)相冲突。项目启动时初始化,会初始化 websocket (非用户连接的),spring 同时会为其注入 service,该对象的 service 不是 null,被成功注入。但是,由于 spring 默认管理的是单例,所以只会注入一次 service。当客户端与服务器端进行连接时,服务器端又会创建一个新的 websocket 对象,但是 spring 管理的都是单例,不会给第二个 websocket 对象注入 service,所以导致只要是用户连接创建的 websocket 对象,都不能再注入了。
第一步:创建一个工具类
通过实现ApplicationContextAware 可以获取到ApplicationContext 下所有的bean
在通过getBean方法获取到我们想要的bean
@Component @Lazy(false) public class ApplicationContextRegister implements ApplicationContextAware { private static ApplicationContext APPLICATION_CONTEXT; /** * 设置spring上下文
*/ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { APPLICATION_CONTEXT = applicationContext; } public static ApplicationContext getApplicationContext() { return APPLICATION_CONTEXT; } }
通过这个工具类获取service的bean
ApplicationContext act = ApplicationContextRegister.getApplicationContext(); PmMemberService memberService = act.getBean(PmMemberService.class);
如果觉得不错记得点赞关注哦