리소스 접근하기

 

리소스 접근하기 - ResourceLoader를 이용한 리소스 접근

리소스 접근하기


  • 스프링은 프로토콜과 관계 없이 리소스에 접근할 수 있는 통합 메커니즘을 제공한다.
  • 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이 발생할 수 있다).