當使用@Value注解獲取配置文件中的值注入到非靜態變量中時,只需要將@Value("${}")放到響應的變量上方即可。當非靜態變量變為靜態變量時,處理方式有所不同。
配置文件
e: 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麻煩的從配置文件中獲取屬性值。原因如下:
靜態只能訪問靜態;
非靜態既可以訪問非靜態的,也可以訪問靜態的。