解决websocket使用@Autowired、@Value获取值为null解决方法
创始人
2024-03-15 14:05:37
0

解决webSocker中使用@Value获取配置文件中值为null

  • 1.(常规写法)在webSocker中使用 @Value 取值为null
  • 2.原因分析
  • 3.解决问题

1.(常规写法)在webSocker中使用 @Value 取值为null

@Component
@ServerEndpoint(value = "/webSocket")
@Slf4j
public class WebSocketServer {@Value("${url}")private String url;
}

2.原因分析

  1. @ServerEndpoint表示这是一个websocket服务端类,根本原因在于:spring管理的都是单例(singleton)和 websocket (多对象)相冲突。
  2. websocket多用于客户端与服务端快速通信:聊天、实时输出日志等场景,这意味着每一个客户端请求服务端都会生成一个新的websocket实例,spring 仅仅针对@component@controller注解完成单例模式管理任务(注意仅仅这一次、这一个对象赋值了)后续随着客户单端访问 websocket不断进行实例化(这些对象不是由spring管理的,所以启动过程并无法给后续的实际处理websocket会话的实例赋值)。不改变方法的话每个 websocket 对象的 注入对象值得都是 null。

3.解决问题

将要注入的对象设为类级别的变量,并通过在方法上使用@Autowired@Value对变量进行初始化,进而使变量不为空:

@Component
@ServerEndpoint(value = "/webSocket")
@Slf4j
public class WebSocketServer {//@Value("${url}") ! 注解掉//static为关键private static String url;@Value("${url}")public void setScadaUrl(String scadaUrl) {this.url= url;}
}

相关内容

热门资讯

聚杰微纤(300819)披露制... 截至2025年12月25日收盘,聚杰微纤(300819)报收于28.81元,较前一交易日上涨3.0%...
康曼德资本董事长丁楹:A股将进... 2025年A股在政策、估值、盈利、资金四重支撑下走出了牛市行情,但市场细分赛道的分化却愈发明显。20...
缅甸妙瓦底KK园区等已被强力拆... 视频来源:公安部微信公众号 记者12月25日从公安部获悉,近日,公安部派出工作组会同缅甸、泰国执法部...
盐田港(000088)披露公司... 截至2025年12月25日收盘,盐田港(000088)报收于4.55元,较前一交易日上涨0.66%,...
952名缅甸妙瓦底地区涉电诈犯... 来源:人民日报客户端 中缅泰联合开展清剿缅甸妙瓦底地区 赌诈园区行动 952名缅甸妙瓦底地区涉电诈犯...
原创 新... 最近几个赛季,孙铭徽一直都被视为广厦的“小外援”,距离他上一次场均得分不到两位数,还要追溯到2018...