springframework

o.s.w IoC 핵심기술. ResourceLoader

Jungsoomin :) 2020. 8. 23. 23:57

ApplicationContext 가 보유한 기능 중, ResourceLoader에 대해 알아본다. 리소스를 읽어오는 녀석이다.

 

resources 폴더에 있는 자원들은 target폴더의 classpath에 들어가게 된다.

 

ApplicationContext는 ResourceLoader를 구현했기에 ApplicationContext도 getResouce() 메서드를 사용할 수 있다.

 

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    private ResourceLoader resourceLoader;

    @Override
    public void run(ApplicationArguments args) throws Exception {
       Resource resource =
               resourceLoader.getResource("classpath:test.txt");
               
     }
}

여기서 ResourceLoader의 getResource("파일로케이션") 메서드는 o.s.w.core.io.Resource 객체를 리턴한다.


  자바 8 스펙기준 Files의 readAllLines 메서드로 파일을 읽어들이고, 이 과정에서 매개값이 Path 객체이므로 Paths의 get 메서드의 매개값에 Resouce 객체의 .getURI()메서드를 사용하여 Path객체를 생성해낼 수 있다.

 

package me.soomin.inflernspring;

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.Paths;

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    private ResourceLoader resourceLoader;

    @Override
    public void run(ApplicationArguments args) throws Exception {
       Resource resource =
               resourceLoader.getResource("classpath:test.txt");

        System.out.println(resource.getDescription());
        System.out.println(Files.readAllLines(Paths.get(resource.getURI())));

        System.out.println(resource.exists());
    }
}

콘솔<<<<

class path resource [test.txt] << getDescription()
[Hello Spirng]  << Files.readAllLines(Paths.get(resource.getURI()))
true  << resource.exists()