[스프링 IoC 컨테이너와 빈]_10 ResourceLoader
ResourceLoader
리소스를 읽어오는 기능을 제공하는 인터페이스
ApplicationContext extends ResourceLoader
리소스 읽어오기
● 파일 시스템에서 읽어오기
● 클래스패스에서 읽어오기
● URL로 읽어오기
● 상대/절대 경로로 읽어오기
Resource getResource(java.lang.String location)
리소스 읽어오기
ApplicationContext가 ResourceLoader를 상속받기 때문에 ApplicationContext를 주입받아도 되지만, 가장 구체적인 인터페이스로 받아서 코딩하는 것이 직관적이기 때문에 권고되는 방식이다.
클래스패스에서 읽어오기
※ [실습]
classpath에 test.txt 파일을 읽어와서 파일이 존재하는지 여부를 출력
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ResourceLoader resourceLoader;
@Override
public void run(ApplicationArguments args) throws Exception {
Resource resource = resourceLoader.getResource("classpath:test.txt");
System.out.println(resource.exists());
}
}
resources
디렉토리에 있는 내용들이 빌드할 때, 타겟 디렉토리 하위에 들어가면서 classpath에 들어간다.
target > classes
가 Class Path의 Root이다.
접두어로 classpath
를 주었기 때문에 classpath 기준으로 리소스를 찾게된다.
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ResourceLoader resourceLoader;
@Override
public void run(ApplicationArguments args) throws Exception {
Resource resource = resourceLoader.getResource("classpath:test.txt");
System.out.println(resource.exists());
System.out.println(resource.getDescription()); //전체 경로
}
}
결과
true
class path resource [test.txt]
[참고] 파일 시스템에서 읽어오기
resource의 URL을 가져와서 해당 경로의 파일을 읽어오는 코드
-
자바 11버전에 생긴 기능
-
Files.readString
해당 경로의 파일 내용을 읽어온다.
Files.readString(Path.of(resource.getURL()))