728x90
application.yml 파일에 설정값을 입력하고 @Value 를 통해 데이터를 가져오는 방식에서, 값을 제대로 설정하였음에도 Null 값을 불러오는 경우가 종종 있습니다. 그럴 땐 @Value 를 작성한 Service 를 new 로 호출하지 않았는지 확인할 필요가 있습니다.
기본적으로 Spring 은 DI 컨테이너가 @Autowired 나 @RequiredArgsConstructor 를 통해 인스턴스를 싱글톤으로 유지합니다. Spring 이 실행될 때, @Value 값이 맵핑된 상태로 인스턴스가 유지가 되던중 new 를 만나게 되면 새로운 인스턴스를 생성해 @Value 값이 맵핑된 변수는 Null 이 됩니다.
# application.yml
spring:
file:
profile-path: file:///D:/profile/
# FileService.java
@Service
public class FileService {
@Value("${spring.file.profile-path}")
private String profilePath;
...
}
# Controller.java
@RestController
@RequiredArgsConstructor
public class Controller {
// 또는 @Autowired
private final FileService fileService;
// X
private FileService fileService = new FileSerice();
}
@RequiredArgsConstructor 또는 @Autowired 로 자동 주입을 받아야 인스턴스가 유지되어 @Value 로 지정한 상수값이 유지될 것 입니다.
728x90
'프레임워크 > SpringMVC' 카테고리의 다른 글
[Spring] Filter, Interceptor, AOP 의 차이 (0) | 2024.05.13 |
---|---|
[Spring] SEO 적용하기 (0) | 2024.05.13 |
[Spring] GET 방식 특수문자 처리하기(The valid characters are defined in RFC 7230 and RFC 3986) (0) | 2024.05.13 |
[Spring] Tomcat docBase 설정 (0) | 2023.10.27 |
[Spring] 다중 프로젝트 추가(settings.gradle) (0) | 2023.07.06 |