码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot中静态变量注入方案,一网打尽


    该博客转载自:SpringBoot中静态变量注入方案,一网打尽_Java笔记虾的博客-CSDN博客前言同事来找我,说自己想使用@Value注解来注入值,但是发现注入不进去,想让我帮忙看看。研究了一番,最后发现是@Value注解无法注入静态变量。下面我们一起来回顾一下本次的bug。普通变...https://blog.csdn.net/weixin_38405253/article/details/122787437

    前言

    同事来找我,说自己想使用@Value注解来注入值,但是发现注入不进去,想让我帮忙看看。研究了一番,最后发现是@Value注解无法注入静态变量。下面我们一起来回顾一下本次的bug。

    普通变量

    首先我们来看看。如何给普通变量注入值?

    例如,application-dev.yml 配置文件有如下配置:

    474889c2a0ce73c9a8ff5babbf7c2c7f.png

    给普通变量赋值时,直接在变量声明之上添加@Value()注解即可,如下所示:

    578dda3c83a625e9187010676a572fff.png

    这个大家应该很熟悉了,这里就不再赘述。

    静态变量

    我们来看看昨天的问题,我们想给项目中的文件上传封装一个工具类。阿里云oss的相关信息我们配置在配置文件中,需要将信息注入到工具类中的变量。为了方便直接使用变量,我们把把变量定义为静态变量。当要给静态变量注入值的时候,若是在静态变量声明之上直接添加@Value()注解是无效的。如下图所示。

    9a95b9fdd66115ecd0a3de09f12bb9e8.png
    80e5720619caf54f539b62b4f2aca8cb.png

    解决方案

    方案一

    若要给静态变量赋值,可以使用set()方法注入。

    1. 类上加入@Component注解

    2. @Value注解标记set方法

    3. 方法名(例如setOssUrl)和参数名(例如ossUrl)可以任意命名

      如下所示:

    f003120fa21ea92b4aba102f2263b431.png

    方案二

    如果你觉得@value注解麻烦。可以使用@ConfigurationProperties注解代替,这样比较简洁

    1. 前缀要写合适

    2. 方法名(例如setOssUrl)必须和属性保持一致,例如写为setUrl()会注入失败

    3. 类上加入@Component注解

    203197f2705b5302dfe323168ef65c96.png
    8a43b18b2bb37909bec714daf73868d7.png

    方案三

    1. 类上加入@Component注解

    2. @PostConstruct注解修饰的方法中进行赋值操作

    51fb5fae8d0f43e5ad4070109528ae5e.png

    使用场景

    那么问题来啦!我们什么场景下需要把值注入到静态变量?

    场景一

    b5ec47a9b28b92bc88fb3bec82cbc39d.png

    场景二

    工具类中将值注入静态变量,就可以直接在静态方法之中使用,我本文中遇到的正是这个场景

    总结

    本文中,我们从一个实际问题出发,探寻了三种在springboot中静态变量注入方案,希望对大家有所帮助。

  • 相关阅读:
    Mac OS 使用Metal渲染NV12、YUV420、CMSampleBufferRef视频
    java计算机毕业设计宠物寄存管理系统源码+mysql数据库+系统+lw文档+部署
    旅游旺季,酒店要如何做好报修管理工作?
    mysql 数据备份与恢复使用详解
    初试占比70%,计算机招生近200人,安徽理工大学考情分析
    计算机毕业设计之微信小程序美容理发店预约系统app
    Django--26Django版本升级以及国际化翻译实现
    ASTM F404 – 21儿童餐椅标准消费者安全规范测试项目
    SpringBoot学习笔记
    S32K144的GPIO使用
  • 原文地址:https://blog.csdn.net/ywj776199845/article/details/124936045
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号