티스토리 뷰
@Value란?
어노테이션 @Value는 properties에 보관되어있는 값을 가져오는 역할을 한다.
예를 들어 application.yml에 파일 업로드에 관한 값을 선언했다고 생각 하자.
사용방법
[application.xml]
CUSTOM:
PHOTO:
UPLOAD_PASS_PHOTO_PATH: /images/pass
UPLOAD_BAD_PHOTO_PATH: /images/bad
JAVA
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath;
동작 방법
어노테이션 @Value는 스프링 구동이 될 때 Component Scan을 통해 Bean으로 등록된 객체와 의존 관계를
주입할 때 등록된다.
만약 아래와 같이 스프링에서 해당 객체를 의존 관계 주입이 안된다면 값은 null이 나온다.
값이 표출이 안되는 상황
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath; //값은 null
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath; //값은 null
}
결론은 @Value를 사용하려면 의존 관계가 되어진 Bean으로 등록 하도록 해야 한다.
@Controller, @Service, @Repository 모두 @Component 어노테이션을 포함하고 있기 때문에
스프링 빈으로 등록할 수 있다.
정상 값 표출
@Component
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath;
}
@Controller
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath;
}
@Service
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath;
}
@Repository
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath;
}
주의 사항
static으로 선언된 변수나 메소드에서 값을 못가져오는 문제가 발생을 한다.
이유는 static변수나 메손드는 객체가 생성이 되기전에 메모리영역에 올라가면서 문제가 발생을 한다.
의존성 주입을 받기도전에 메모리영역에 올라가 해당 값을 가져오지 못한다.
stitic 사용으로 인해 값이 null이 되는 상황
@Component
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private static passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private static badUploadPath;
public static void passUploadFile(File upFile){
//값은 null이 나온다.
String filePath = passUploadPath;
............
}
}
해결 방법은 static을 안쓰거나 외부에서 받아 오면 된다.
해결 방법
@Service
public class ComponentUtil {
@Value("${CUSTOM.PHOTO.UPLOAD_PASS_PHOTO_PATH}")
private passUploadPath;
@Value("${CUSTOM.PHOTO.UPLOAD_BAD_PHOTO_PATH}")
private badUploadPath;
ComponentUtil.passUploadFile(new File(), passUploadPath);
}
@Component
public class ComponentUtil {
public static void passUploadFile(File upFile, String passUploadPath){
String filePath = passUploadPath;
............
}
}
'Project > Framework' 카테고리의 다른 글
[Spring Boot] @Transactional 트랜젝션 정리 (0) | 2022.10.26 |
---|---|
[Spring Boot]WARN : [io.undertow.websockets.jsr:68] handleDeployment (0) | 2020.07.20 |
[Spring Boot]WARNING: An illegal reflective access operation has occurred (0) | 2020.07.20 |
[MyBatis] 언더바(Underscore)가 포함된 필드명 CamelCase로 맵핑 (0) | 2019.05.08 |
Spring 4.3 + Mybatis + 대용량 EXCEL 다운로드 (0) | 2018.04.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- logstash
- Letsencrypt wildcard
- Intellj들여쓰기
- SSL
- #logback
- letencrypt
- letsencrypt
- nginx
- elk8.x
- SSL인증서
- camelcase
- 마이바티스CamelCase
- 인증서설치
- 마이바티스
- Letsencrypt+nginx
- 인증서자동갱신
- Letsencrypt wildcard auto renew
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함