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()
'springframework' 카테고리의 다른 글
o.s.w IoC 핵심기술. Validation 추상화 (0) | 2020.08.25 |
---|---|
o.s.w IoC 핵심기술. Resource 추상화 (0) | 2020.08.24 |
springframeworko.s.w IoC 핵심기술. ApplicationEventPublisher (0) | 2020.08.21 |
springframeworko.s.w IoC 핵심기술. MessageSource (0) | 2020.08.21 |
o.s.w IoC 핵심기술. @PropertySource (0) | 2020.08.20 |