개발강의정리/Spring

[스프링 프레임워크 핵심 기술] 3-1. Resource 추상화

nineDeveloper 2019. 10. 6.
728x90

스프링 프레임워크 핵심 기술

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-core-tech/tree/chap03-01-resource

 

freespringlecture/spring-core-tech

백기선님의 스프링 프레임워크 핵심 기술 강의 내용 정리. Contribute to freespringlecture/spring-core-tech development by creating an account on GitHub.

github.com

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/spring-framework_core/dashboard

 

스프링 프레임워크 핵심 기술 - 인프런

이번 강좌는 스프링 부트를 사용하며 스프링 핵심 기술을 학습합니다 따라서 스프링 부트 기반의 프로젝트를 사용하고 있는 개발자 또는 학생에게 유용한 스프링 강좌입니다. 초급 웹 개발 Java Spring 온라인 강의

www.inflearn.com

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

3-1. Resource 추상화

org.springframework.core.io.Resource

특징

  • java.net.URL을 추상화 한 것.
  • 스프링 내부에서 많이 사용하는 인터페이스.

추상화 한 이유

  • 클래스패스 기준으로 리소스 읽어오는 기능 부재
  • ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재
  • 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족하다

인터페이스 둘러보기

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/io/Resource.html

  • 상속 받은 인터페이스
  • 주요메소드
    • getInputStream()
    • exitst()
    • isOpen()
    • getDescription(): 전체 경로 포함한 파일 이름 또는 실제 URL

구현체

https://docs.oracle.com/javase/7/docs/api/java/net/URL.html

  • UrlResource: ​java.net.URL​ 참고, 기본으로 지원하는 프로토콜 http, https, ftp, file, jar
  • ClassPathResource: 지원하는 접두어 classpath:
  • FileSystemResource
  • ServletContextResource: 웹 애플리케이션 루트에서 상대 경로로 리소스 찾는다
  • ...

리소스 읽어오기

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#resources-resourceloaderaware

  • Resource의 타입은 locaion 문자열과 ​ApplicationContext의 타입에​​ 따라 결정 된다

    • ClassPathXmlApplicationContext -> ClassPathResource
    • FileSystemXmlApplicationContext -> FileSystemResource
    • WebApplicationContext -> ServletContextResource
  • ApplicationContext의 타입에 상관없이 리소스 타입을 강제하려면 java.net.URL 접두어(+ classpath:)중 하나를 사용할 수 있다

    명시적이므로 접두어를 사용하는 것을 권장
    접두어를 사용하지 않으면 ServletContextResource로 Resolve 되므로 주의해야 함
    루트는 ///를 사용 와일드 카드classpath* 이렇게 사용할 수도 있음

    • classpath:​​me/whiteship/config.xml -> ClassPathResource
    • file://​​/some/resource/path/config.xml -> FileSystemResource
728x90

댓글

💲 추천 글