[스프링 IoC 컨테이너와 빈]_10 ResourceLoader

less than 1 minute read

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()))