| |
|
开发:
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地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |