2.4 ResourceReader

ResourceLoader 인퍼페이스는 Resource 인스턴스를 반환할 수 있는 오브젝트에 의해 확장된 것을 의미한다. 아래는 ResourceLoader 인터페이스 정의를 보여준다.

public interface ResourceLoader {

    Resource getResource(String location);

}

모든 어플리케이션 컨텍스트는 ResourceLoader 인터페이스를 확장한다. 그러므로 모든 어플리케이션 컨텍스트는 Resource 인스턴스를 포함한다. 특정 응용 프로그램 컨텍스트에서 getResource ()를 호출하고 지정된 위치 경로에 특정 접두사가 없으면 특정 응용 프로그램 컨텍스트에 적합한 Resource 유형이 반환된다. 예를 들어서 ClassPathXmlApplicationContext 인스턴스를 실행한 코드 스니펫이다.

Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

ClassPathXmlApplicationContext에 대해, 그 코드는 ClassPathResource를 반환한다. 만약 같은 메소드가 FileSystemXmlApplicationContext인스턴스에 대해 실행된다면, FileSystemResource를 반환한다. WebApplicationContext같은 경우는 ServletContextResource를 반환한다. 유사하게 각 컨텍스트마다 적절한 오브젝트를 반환한다. 결과적으로 특정 어플리케이션 컨텍스트에 적절한 리소스를 로드할 수 있다. 반면에 어플리케이션 컨텍스트 타입에도 불구하고 사용될 ClassPathResource를 강화한다면 특별한 classpath: prefix로 구체화한다.

딱히 지정되지 않았다면 컨텍스트의 타입에 맞추지만 아래처럼 classpath: 라고 구체적으로 명시했다면 그걸 따른다는 이야기

Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");

유사하게 표준 java.net.URL prefix를 구체화하서 사용한 UrlResource를 강화할 수 있다. 아래는 file와 http prefix를 사용한 예제다.

Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");

아래는 String 오브젝트를 Resource 오브젝트로 변환하는 전략을 요약한 테이블이다.

Table 10. Resource strings

Prefix

Example

Explanation

classpath:

classpath:com/myapp/config.xml

클래스패스로부터 로드된다.

file:

파일시스템에서 URL로서 로드된다. FileSystemResourceCaveats. 를 볼 것.

http:

URL로서 로드된다.

(none)

/data/config.xml

ApplicationContext 에 의존한다..

Last updated