스프링 프레임워크 핵심기술을 공부하고 정리하는 포스트입니다.


ResourceLoader

   ResourceLoader는 이름에서 알 수 있듯이 리소스를 읽어오는 기능을 제공하는 인터페이스로 ApplicationContext의 상위 인터페이스이다.


▶ AppRunner

package me.gracenam.demospring51;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;

@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());
    }

}

이 상태에서 실행하면 당연히 false가 찍힐 것이다. 왜냐면 test.txt 파일을 아직 만들지 않았기 때문이다.

resources 폴더 아래에 test.txt 파일을 만들고 확인해보자.

▶ test.txt

hello spring
package me.gracenam.demospring51;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;

import java.nio.file.Files;
import java.nio.file.Path;

@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());
        System.out.println(Files.readString(Path.of(resource.getURI())));
    }

}

test.txt 파일을 만들고 나면 resources 디렉토리에 존재하는 것들이 build하는 과정에 target 디렉토리 밑으로 들어가면서 classpath에 추가된다. classes부터 classpath 루트이고 classpath 기준으로 리소스를 찾는다.


이제 실행한 결과를 살펴보자.


리소스를 읽어오는 방법

  • 파일 시스템에서 읽어오기
  • 클래스패스에서 읽어오기
  • URL로 읽어오기
  • 상대 / 절대 경로로 읽어오기

Reference