前言大家好,我是Milo,我的同事昨天来找我了。说想用@Value注解注入值,发现注入不进去,想让我帮忙。经过一番研究,终于发现@Value注解不能注入静态变量。让我们一起回顾一下这个错误。我们先来看看普通变量。如何给普通变量注入值?例如application-dev.yml配置文件有如下配置:给普通变量赋值时,只需在变量声明正上方加上@Value()注解即可,如下图:这个大家应该很熟悉,在此不再赘述。静态变量让我们来看看昨天的问题。我们想在项目中封装一个文件上传的工具类。我们在配置文件中配置了阿里云oss的相关信息,我们需要将这些信息注入到工具类中的变量中。为了方便直接使用变量,我们将变量定义为静态变量。向静态变量注入值时,在静态变量声明正上方加上@Value()注解是无效的。如下所示。方案一如果想给静态变量赋值,可以使用set()方法注入。给类加上@Component注解,@Value注解来标记set方法。方法名(如setOssUrl)和参数名(如ossUrl)可以任意命名,如下图:方案二如果觉得@value注解麻烦。可以改用@ConfigurationProperties注解,这样更简洁。写一个合适的方法名(如setOssUrl)必须与属性一致。例如,如果您将其写为setUrl(),它将在失败的类上注入@Component注解。在第三个类中添加@Component注解@PostConstruct注解修饰的方法中的赋值操作使用场景,那么问题来了!在什么场景下我们需要将值注入到静态变量中呢?场景一,场景二,工具类将值注入静态变量,在静态方法中直接使用即可,本文遇到的正是这种场景。小结在本文中,我们从一个实际问题出发,探讨了springboot中的三种静态变量注入方案。希望对大家有所帮助。本文转载自微信公众号《爱写bug的米罗》
