Resource 추상화

Resource 추상화

Resource

스프링 Resource 객체는 URL 클래스를 추상화한 인터페이스입니다. Resource객체는 스프링 내부에서 가장 많이 사용하는 인터페이스입니다.

스프링 IoC 컨테이너가 생성될 때 컨테이너 설정 정보를 담는 파일들을 가져올 때도 사용됩니다. 아래 코드에서도 지정한 문자열이 getResource("conffig.xml")과 같이 내부적으로 Resource 객체를 생성하여 사용합니다.

Application context = new ClassPathXmlApplicationContext("config.xml");

리소스를 읽어오는 기능을 Reosurce 인터페이스를 추상화한 이유는 다음과 같습니다.

1. 클래스 패스 기준으로 리소스를 읽어오는 기능 부재.

2. ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재

3. 새로운 핸들러를 등록해 사용할 순 있지만 기능이 복잡해지고 편리하지 않습니다.

Resource의 구현체

Reosurce 인터페이스를 구현한 구현체들은 많지만 주요 구현체들은 다음과 같습니다.

UrlResource: URL을 기준으로 리소스를 읽어 들임. 지원하는 프로토콜은 http, https, ftp, file, jar

ClassPathResource: 지원하는 접두어 classpath:

FileSystemResource: 파일 시스템을 기준으로 읽음

ServletContextResource: 웹 애플리케이션 루트에서 상대 경로로 리소스를 찾음.

실질적으로 가장 많이 쓰는 구현체는 ServletContextResource 입니다. 그 이유는 읽어 들이는 Resource 타입이 ApplicationContext 타입에 따라 결정되기 때문입니다.

ClassPathXmlApplicationContext -> ClassPathResource

FileSystemXmlApplicationContext -> FileSystemResource

WebApplicationContext -> ServletContextResource

ApplicationContext 대부분의 경우 WebApplicationContext를 사용합니다. 따라서 ServletContextResource를 사용하게 됩니다.

ApplicationContext 구현체 타입과 관계없이 Reosurce 구현체 타입을 강제하려면 java.net.URL 접두어 중 하나를 prefix로 사용하면 됩니다.

from http://jinukix.tistory.com/64 by ccl(A) rewrite - 2021-10-20 19:27:51