springboot+websocket 注入service失败的问题

在我们使用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);

 如果觉得不错记得点赞关注哦

上一篇:SpringBoot启动过程中,BeanFactoryPostProcessor注册时机


下一篇:VRRP热备?也可用在无线局域网