on
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