작업 상태
- 스프링으로 파일첨부 작업을 하던중, Controller쪽에 있던 설정을 Service쪽으로 옮긴후에 발생한 에러입니다.
- Controller에서는 동작하던 상태였습니다.
- application.properties 설정 upload.folder=, 실제 위치 확인 완료
에러 메시지
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'fileUploadController' defined in file
Unsatisfied dependency expressed through constructor parameter 0
원인
Spring 컨텍스트가 아직 초기화되지 않은 상태에서 StorageService 인스턴스가 생성되어서 발생하는 문제입니다.
처리
에러발생상태 코드
@Service
public class StorageService {
@Value("${upload.folder}")
private String uploadFolder;
private final Path rootLocation;
public StorageService() {
this.rootLocation = Paths.get(uploadFolder); //문제 발생부분
}
...
처리 상태
@Service
public class StorageService {
@Value("${upload.folder}")
private String uploadFolder;
private Path rootLocation;
public StorageService() {
this.rootLocation = null;
}
@PostConstruct
public void init() {
this.rootLocation = Paths.get(uploadFolder);
}
@PostConstruct 어노테이션이 붙은 메서드는 해당 클래스의 인스턴스 생성 및 DI가 완료된 후, 초기화 작업을 수행하기 위해 호출되는 메서드입니다.
@Value 어노테이션을 사용하면, 스프링 컨테이너가 빈을 생성할 때 주입하려는 값을 설정 파일(application.properties 또는 application.yml) 등 외부의 설정 파일에서 가져와서 주입할 수 있습니다.
참고
Getting Started | Uploading Files (spring.io)
'간단 에러 처리기' 카테고리의 다른 글
INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.a3040 signatures do not match previously installed version (0) | 2023.04.11 |
---|---|
java.nio.file.InvalidPathException (0) | 2023.04.10 |
Module not found: Error: Can't resolve 'loadsh' (0) | 2023.04.08 |
return 누락으로 자바스크립트 find()에서 undefined 결과값 출력 (0) | 2023.04.08 |
AuthenticationManager' that could not be found. (0) | 2023.04.07 |