IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> websocket使用@Autowired、@Value获取值为null解决方法 -> 正文阅读

[网络协议]websocket使用@Autowired、@Value获取值为null解决方法

作为一名资深码农,原本以为闭着眼睛都可以用@Autowired、@Value轻松获取注入的对象,不料最近在写一个小工具时碰了一鼻子灰,先上代码:

@ServerEndpoint("/log")
@Component
public class LogWebSocketHandle {

    @Value("${wslog_commond}")//
    private  String wslog_commond1;

相信java 码农们再熟悉不过了,不过你不要高兴太早,取值时候一个null足以让你抓狂。

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

了解了这点后,我们可以将要注入的对象设为类级别的变量,并通过在方法上使用@Autowired、@Value对变量进行初始化,进而使变量不为空:

//@Value("${wslog_commond}")千万不可打开这个注解
private static String wslog_commond;//static为关键

@Value("${wslog_commond}")
public void setWslog_commond(String wslog_commond) {

    LogWebSocketHandle.wslog_commond = wslog_commond;
}

总结:websocket与spring框架的@component、@controller无冲突,spring会按照原来规则实例化一个对象,只不过该对象在运行期间一直不会被使用,这就成了废物。将类的要注入属性改为静态类级别变量,通过第一次实例化调用set方法完成对类的变量赋值动作,变废为宝完成其使命。

本案例还是来自本人写的推docker送镜像到haobor工具,源码地址GitHub - kakahu2015/harbor-demo?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:57:52  更:2022-03-12 17:58:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:49:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码