리소스 접근하기
- 스프링은 프로토콜과 관계 없이 리소스에 접근할 수 있는 통합 메커니즘을 제공한다.
- org.springframework.core.io.Resource 인터페이스를 사용해 리소스에 접근 가능
- 일반적으로 FileSystemResource, ClassPathResource, UrlResource 클래스를 사용한다.
- ResourceLoader 인터페이스의 구현체인 ApplicationContext를 사용하여 Resource 인스턴스를 찾거나 생성한다.
...
import org.springframework.core.io.Resource;
public class ResourceDemo {
public static void main(String... args) throws Exception {
ApllicationContext ctx = new ClassPathXmlApplicationContext();
File file = File.createTempFile("test", "txt");
file.deleteOnExit();
// Windows에서 실행할 경우 "file:///"를 사용한다.
Resource res1 = ctx.getResource("file://" + file.getPath());
displayInfo(res1);
// "classpath:"는 ResourceLoader가 classpath에서 리소스를 검색해야 함
Resource res2 = ctx.getResource("classpath:test.txt");
displayInfo(res2);
Resource res3 = ctx.getResource("http://www.google.com");
displayInfo(res3);
}
private static void displayInfo(Resource res) throws Exception {
System.out.println(res.getClass());
System.out.println(res.getURL().getContent());
System.out.println("");
}
}
- res1은 URL과 파일을 프로토콜만 다른 동일한 타입의 리소스로 처리하는 스프링의 전략 때문에 getClass()에서 FileUrlResource를 반환한다.
- 리소스의 컨텐츠에 접근할 때는 getInputStream()을 사용하는 것이 권장된다(파일 리소스를 사용하지 않는 경우 getFile() 호출 시 FileNotFoundException이 발생할 수 있다).