@Value & static
1. @Value
.properties, .yml에 설정한 내용을 주입시켜주는 Annotation. 노출되기 민감한 정보들을 모아 놓은 설정 파일을 필요한 곳에 주입시켜줌
- Format : @Value("${property key}")
- 일반적으로 사용하는 상황과 static 변수로 사용할 때의 차이점이 있음
1.1 .properties / .yml
//application.yml
opensea:
api :
apikey: YOU_OPENSEA_API_KEY
baseUrl :
v1 : "https://api.opensea.io/api/v1"
v2 : "https://api.opensea.io/api/v2"
protocol : "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC"
1.2 usage without static
package com.example.utils.common;
import org.springframework.beans.factory.annotation.Value;
@Component
public class TestExample {
@Value("${opensea.api.baseUrl.v1}")
public String openseaV1Url;
@Value("${opensea.api.baseUrl.v2}")
public String openseaV2Url;
@Value("${opensea.api.apikey}")
public String openseaApiKey;
@Value("${opensea.api.protocol}")
public String openseaApiProtocol;
}
- 일반적으로 설정 파일에 존재하는 변수를 호출하는 방식
- @Value를 이용하여 불러오기 원하는 변수에 주입(Injecting)하도록 설정
1.3 usage with static
package com.example.utils.common;
import org.springframework.beans.factory.annotation.Value;
@Component
public class TestExample {
public static String openseaV1Url;
public static String openseaV2Url;
public static String openseaApiKey;
public static String openseaApiProtocol;
@Value("${opensea.api.baseUrl.v1}")
public void setOpenseaV1Url(String value) {
openseaV1Url = value;
}
@Value("${opensea.api.baseUrl.v2}")
public void setOpenseaV2Url(String value) {
openseaV2Url = value;
}
@Value("${opensea.api.apikey}")
public void setOpenseaApiKey(String value) {
openseaApiKey = value;
}
@Value("${opensea.api.protocol}")
public void setOpenseaApiProtocol(String value) {
openseaApiProtocol = value;
}
}
- static 변수에서 @Value 사용시 잘못된 결과를 초래할 수 있음
- TestExample.openseaApiKey로 접근시 null이 반환됨
- setter를 추가하여 static 변수에 설정 파일의 변수의 값을 넣어줌