普通变量
首先来看看,如何给普通变量注入值?
例如,application-dev.yml 配置文件有如下配置:
给普通变量赋值时,直接在变量声明之上添加@Value()
注解即可,如下所示:
静态变量
例如给项目中的文件上传封装一个工具类。阿里云oss的相关信息配置在配置文件中,需要将信息注入到工具类中的变量。为了方便直接使用变量,把变量定义为静态变量。当要给静态变量注入值的时候,若是在静态变量声明之上直接添加@Value()
注解是无效的。如下图所示。
解决方案
方案一
若要给静态变量赋值,可以使用set()
方法注入。
- 类上加入
@Component
注解 @Value
注解标记set
方法- 方法名(例如setOssUrl)和参数名(例如ossUrl)可以任意命名如下所示:
方案二
如果觉得@Value
注解麻烦,可以使用@ConfigurationProperties
注解代替,这样比较简洁
- 前缀要写合适
- 方法名(例如setOssUrl)必须和属性保持一致,例如写为
setUrl()
会注入失败 - 类上加入
@Component
注解
方案三
- 类上加入
@Component
注解 @PostConstruct
注解修饰的方法中进行赋值操作
使用场景
场景一
这个主要看静态的使用场景。比如:一个配置文件中的一个变量,多个类中都要用到,在多个类中都通过@Value
方式获取也可以,但是弊端是:同一个参数,就有了多处引用的地方,一旦出现问题,只通过使用的的地方不方便看到,要全局搜。如果使用public static
注入,那么整个项目使用的这个配置参数都是一致的,统一的。
场景二
工具类中将值注入静态变量,就可以直接在静态方法之中使用。