티스토리 뷰

Spring

Spring - MVC ResourceLoader

엔꾸꾸 2019. 7. 30. 21:41

Spring - ResourceLoader

ResourceLoader

  • ResourceLoader는 리소스를 읽어오는 기능을 제공하는 Interface
  • 리소스를 읽어 Resource Type 객체를 반환한다.
  • Spring 을 사용한다면 @Autowired를 통하여 의존성 주입을 받아 바로 사용할 수 있다.
  • ApplicationContext는 ResourceLoader를 구현하고 있기때문에 ApplicationContext로도 ResourceLoader의 기능을 사용할 수 있다.

  • ResourceLoader를 우리가 Bean으로 등록하지 않았는데 대체 어떻게 사용할수 있는것일까 ?

  • 테스트 코드

  • 결과

  • ApplicationContext는 ResourceLoader를 구현하고 있기때문에 ResourceLoader Type으로 주입 받아 사용할 수 있는것이다.

  • 앞서 ResourceLoader는 Resource Type 객체를 반환한다고 했다. 그렇다면 Resource 란 대체무엇일까

Resource Interface

  • 스프링의 Resource 인터페이스는 저수준 리소스 접근을 추상화한 더 기능이 많은 인터페이스이다.
  • 주요 메서드
    • getInputStream(): 리소스의 위치를 찾고 오픈한뒤 리소스를 읽기위한 InputStream을 Return, 호출시마다 새로운 객체를 Return 스트림을 닫는것은 호출한 쪽에 책임이 있다.
    • exists(): 해당 리소스가 존재하는지 논리값을 Return
    • isOpen(): 해동 리소스가 오픈 스트림을 가진 하나의 핸들을 나타내는지 논리값을 Return, true일경우 'InputStream은 여러번 읽을수 없고 반드시 한번만 읽은뒤 닫아주어야 한다.' InputStreamResource 예외를 가진 일반적인 리소스 구현체에서는 false
    • getDescription(): 해당 리소스에 대한 설명을 Return, 정규화된 파일명이나, 리소스의 실제 URL이다.

 

 

  • Resource 구현체
      1. UrlResource
        • java.net.URL을 Wrapping 하고 일반적으로 URL로 접근할수 있는 파일, HTTP, FTP등 과 같은 객체에 접근시 사용한다.
      1. ClassPathResource
        • 클래스패스에서 얻어와야하는 리소스를 나타낸다.
        • Thread Context Loader, ClassLoader , Class Load시 주어진 클래스를 모두 사용한다.
        • 파일시스템에 존재하면 java.io.File과 같은 해결책을 지원하지만 jar에 존재하는 클래스패스 리소스는 지원하지않으며 파일시스템으로 확장하지도 않는다.
      1. FileSystemResource
        • java.io.File 핸들에 대한 구현체이다.
      1. ServletContextResource
        • 웹 어플리케이션 루트 경로내에서 상대경로를 인터프리팅하는 ServletContext 리소스에대한 구현체이다.
      1. InputStreamResource
        • InputStream에 대한 구현체이다. 적용가능한 특정 Resource 구현체가 없을때만 사용 가능하다.
        • ByteArrayResource 나 파일 기반 Resource구현체가 가능한 곳에서 선호한다.
        • 다른 구현체와 달리 이미 오픈된 Resource에 대한 디스크립터이다.
        • 즉 isOpen() 은 true를 리턴한다.
      1. ByteArrayResource
        • Byte 배열에 대한 구현체이다.
        • 주어진 바이트배열에서 컨텐츠 로드시 유용하다.

ResourceLoaderAware Interface

  • ResourceLoaderAware 인터페이스는 ResourceLoader 참조와 함께 제공되기를 기대하는 객체를 식별하는 특별한 마커(marker) 인터페이스이다.

  • 이를 구현하는 Class가 ApplicationContext에 Bean으로 등록 되었을때 ApplicationContext는 해당 클래스를 ResourceLoaderAware로 인식한다.

  • 그런 다음 자신을 Argument로 setResourceLoader 메서드를 호출해 의존성을 주입한다.

 

 

  • ResourceLoaderAware를 사용하는 이유 ?

    • ApplicationContext가 ResourceLoader를 구현하고있기때문에 ApplicationContext를 직접 사용해도 된다.
    • 하지만 리소스를 로드하는 목적이라면 리소스 로드용 ResourceLoader를 사용하는 편이 낫다.

'Spring' 카테고리의 다른 글

Spring - MVC @ResponseBody_ResponseEntity  (0) 2019.07.31
Spring - MVC FileDownload  (0) 2019.07.30
Spring - MVC MultipartFile  (0) 2019.07.29
Spring - MVC RedirectAttributes  (0) 2019.07.29
Spring - MVC @SessionAttribute  (0) 2019.07.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함