当使用@Value注解获取配置文件中的值注入到非静态变量中时,只需要将@Value("${}")放到响应的变量上方即可。当非静态变量变为静态变量时,处理方式有所不同。
配置文件
ev: uri: https://123456.com appId: 123456
注入到非静态变量
@Value("${e.uri}") private String uri; @Value("${e.appId}") private String appId;
注入到静态变量
@Component //此注解不能少,否则需要收动实例化。类似@Component注解的都可以 public class EContractUtil { //声明静态变量 private static String uri; private static String appId; //set方式注入值 @Value("${e.uri}") //此时注解一定放在此处,放到变量上方获取到的将是null public void setUri(String uri) { this.uri = uri; } @Value("${e.appId}") public void setAppId(String appId) { this.appId = appId; } public static void accessToken() { //在静态方法中只能使用静态变量,不能使用非静态变量,并且静态变量的值从配置文件中获取,就需要使用上述方法。 } }
至于为什么不直接在静态方法中使用非静态变量,这样就不用name麻烦的从配置文件中获取属性值。原因如下:
静态只能访问静态;
非静态既可以访问非静态的,也可以访问静态的。