Springboot中@Value注解未注入值

遇到的现象

在bootstrap.yml中配置了七牛云的相关值,但在代码中通过@Value注解未注入该值。debug调试发现该值未NULL

@Value("${qiniu.secreteKey}")
public static String secreteKey; 

问题原因

问题原因其实很基础,就是@Value注解的生效条件。我是因为使用的是静态变量。
@Value注解生效的条件时,该字段不能为静态的,不能是常量,并且该类必须注册为Bean对象(加@Component注解)。在使用时必须注入该对象,而不能使用new的方式创建对象。

解决方案

第一种方案最简单,将static去掉即可。

@Value("${qiniu.secreteKey}")
public String secreteKey; 

但有的时候我们就希望该字段是静态的该怎么办呢?
第二个方法,先思考为什么不能使用@Value注入静态变量的值呢?因为静态变量不是对象属性而是类属性。而Spring依赖注入是对象层面的,所以他无法帮我们注入类属性。
既然已经明了问题的根本原因,那接下来就很容易了,我们知道@Value的作用对象不仅可以用于字段,也可以用于方法,用于形参等。

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
	String value();
}

所以我们可以在一个对象方法上加入@Value注解,让他来设置我们的静态变量。

@Component
public class Tools {
	public static String secreteKey; 
	
	@Value("${qiniu.secreteKey}")
	public void setSecreteKey(String key){
		Tools.secreteKey = key
	}
}

总结

@Value是一个很基础的注解,但平时使用@Value更多的是在对象属性上,慢慢忘记了@Value的相关知识。所以温故而知新有的时候真的应该停下来将之前的知识复习一遍。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值