본문 바로가기
Spring/Spring Core

[Section 2] Resource 추상화

by kevinntech 2020. 9. 13.

해당 게시물은 백기선님의 스프링 프레임워크 핵심 기술 강좌를 정리한 내용 입니다.

 

 

Resource

 

- Resource는 java.net.URL을 추상화한 인터페이스다.

 

- 그리고 스프링 내부에서 많이 사용하는 인터페이스이다.

 

Resource를 추상화한 이유

 

- java.net.URL 클래스는 클래스 패스를 기준으로 리소스를 읽어오는 기능이 없다.

 

- ServletContext를 기준으로 상대 경로로 리소스를 읽어오는 기능이 없다.

 

- 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족하다.

 

Resource 인터페이스 구현체

 

- Resource 인터페이스를 구현한 주요 구현체들은 아래와 같다.

 

   ①  UrlResource : URL을 기준으로 리소스를 찾는다

                                      지원하는 프로토콜은 http, https, ftp, file, jar

 

   ② ClassPathResource : 접두어가 classpath: 일 때, 클래스패스를 기준으로 리소스를 찾는다.

 

   ③  FileSystemResource : 파일 시스템을 기준으로 리소스를 찾는다.

 

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

                                                               스프링 부트의 기본적인 내장형 톰캣은 context path가 지정 되어 있지 않으므로

                                                               리소스를 찾을 수가 없다. 그래서 클래스 패스를 기준으로 찾도록 classpath 접두어를 사용해야 된다.

 

Resource 읽어 오기 

 

- Resource의 타입은 리소스 위치를 지정하는 location 문자열과 ApplicationContext의 타입에 따라 결정 됩니다. 

     ClassPathXmlApplicationContext 이면 ClassPathResource


     FileSystemXmlApplicationContext 이면 FileSystemResource


      WebApplicationContext 이면 ServletContextResource

 

 

- ApplicationContext의 타입에 상관없이 리소스 타입을 강제하려면 java.net.URL 접두어와 classpath: 중 하나를 사용할 수 있다.


   (접두어를 사용하는 방법을 권장하며 그 이유는 명시적이기 때문이다.)

 

  ① classpath: me/whiteship/config.xml            →      ClassPathResource

 

  ② file:/// some/resource/path/config.xml      →      FileSystemResource

 

 

 

댓글