이번 글에서는 ApplicationContext의 마지막 기능인 ResourceLoader에 대해서 알아보도록하자.
ResourceLoader라는 것은 이름 그대로 Resource 를 로딩해주는 인터페이스이다. 이 인터페이스를 ApplicationContext가 상속 받고 있기 때문에 ApplicationContext 객체를 통해 Resource 로딩기능도 사용할 수 있다. 아래의 코드를 보도록하자.
AppRunner.java
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ResourceLoader resourceLoader;
public void run(ApplicationArguments args) throws Exception {
Resource resource = resourceLoader.getResource("classpath:text.txt");
System.out.println(resource.exists());
}
}
Runner클래스를 생성하고, ResourceLoader 클래스의 메소드를 이용하여 파일을 불러오도록하는 코드이다.
파일 생성을 하지않고 위의 코드를 실행했을때, Resource 클래스의 exists() 메소드는 당연히 false 를 반환할 것이다.
위의 ResourceLoader 클래스의 getResource() 메소드에 인자로 넣어준 디렉토리 경로에 text.txt 파일을 생성하도록 하자.
위의 파일 경로를 보면 resources 폴더 밑에 있는 파일들은 프로젝트가 빌드가되면서 tartget/classes 디렉토리 하위에 생성이된다. 그곳이 바로 위의 코드에서 명시한 "classpath:"의 위치의 시작점이다. 그렇다면 역시 직접 생성한 text.txt 파일도 해당 위치에 생성이 될 것이다.
파일을 생성하였다면, 아래와 같이 문자열을 작성해두도록하자.
text.txt
Success!! Read "text.txt"
위처럼 읽어들일 문자열을 작성하고, Runner클래스를 아래와 같이 수정하도록하자.
AppRunner.java
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ResourceLoader resourceLoader;
public void run(ApplicationArguments args) throws Exception {
Resource resource = resourceLoader.getResource("classpath:text.txt");
System.out.println(resource.exists());
// jdk 11버전 미만인 경우
File file = resource.getFile();
String textString = new String(
Files.readAllBytes(file.toPath()));
System.out.println(textString);
// jdk 11버전인 경우
System.out.println(Files.readString(Path.of(resource.getURI())));
}
}
위와 같이 Runner클래스를 수정한 후에, 프로젝트를 실행하면 text.txt 파일을 읽어드린 결과를 확인할 수 있다.
이번 글에서는 스프링에서 ResourceLoader를 이용해 Resource를 참조하여 코드에서 사용하는 방식에 대해서 알아보았다.
다음 글에서는 Resource에 대해서 좀더 자세히 알아보도록하자.
내용 출처
'Spring' 카테고리의 다른 글
[Spring Error] There is no PasswordEncoder mapped for the id "null" (0) | 2021.03.21 |
---|---|
[Spring] IntelliJ 에서 queryDSL 의 Q 도메인을 찾지 못할때 (0) | 2020.08.23 |
[Spring] ApplicationEventPublisher (0) | 2020.05.15 |
[Spring] MessageSource (0) | 2020.01.18 |
[Spring] Environment - Property (0) | 2020.01.07 |
댓글