SpringBoot中静态变量注入方案,一网打尽

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

[[431987]]

前言

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

普通变量

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

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

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

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

静态变量

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

解决方案

方案一

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

  1. 类上加入@Component注解
  2. @Value注解标记set方法
  3. 方法名(例如setOssUrl)和参数名(例如ossUrl)可以任意命名

如下所示:

方案二

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

  1. 前缀要写合适
  2. 方法名(例如setOssUrl)必须和属性保持一致,例如写为setUrl()会注入失败
  3. 类上加入@Component注解

方案三

  1. 类上加入@Component注解
  2. @PostConstruct注解修饰的方法中进行赋值操作

使用场景

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

场景一

场景二

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

总结

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

本文转载自微信公众号「爱写Bug的麦洛」

 

责任编辑:姜华 来源: 爱写Bug的麦洛
相关推荐

2024-04-26 00:25:52

Rust语法生命周期

2021-08-05 06:54:05

流程控制default

2019-07-24 15:30:00

SQL注入数据库

2024-02-27 10:11:36

前端CSS@规则

2021-10-11 07:55:42

浏览器语法Webpack

2024-04-07 08:41:34

2013-08-02 10:52:10

Android UI控件

2024-06-12 00:00:05

2024-08-26 10:01:50

2010-08-25 01:59:00

2011-12-02 09:22:23

网络管理NetQos

2024-02-23 08:14:01

项目开发Spring

2013-10-16 14:18:02

工具图像处理

2023-04-06 09:08:41

BPM流程引擎

2024-06-24 12:51:50

2021-05-20 11:17:49

加密货币区块链印度

2020-02-21 08:45:45

PythonWeb开发框架

2023-09-06 18:37:45

CSS选择器符号

2020-10-19 06:43:53

Redis脚本原子

2009-04-02 10:17:00

交换机产品选购
点赞
收藏

51CTO技术栈公众号