본문 바로가기
Spring

[Spring] ResourceLoader

by dbjh 2020. 5. 17.
반응형

이번 글에서는 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 파일을 생성하도록 하자.

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 파일을 읽어드린 결과를 확인할 수 있다.

text.txt 파일을 읽은 후에 출력한 결과

 

이번 글에서는 스프링에서 ResourceLoader를 이용해 Resource를 참조하여 코드에서 사용하는 방식에 대해서 알아보았다.
다음 글에서는 Resource에 대해서 좀더 자세히 알아보도록하자.

 

내용 출처

 

 

반응형

댓글