728x90
스프링 프레임워크 핵심 기술
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/spring-core-tech/tree/chap03-01-resource
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/spring-framework_core/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
3-1. Resource 추상화
org.springframework.core.io.Resource
특징
- java.net.URL을 추상화 한 것.
- 스프링 내부에서 많이 사용하는 인터페이스.
추상화 한 이유
- 클래스패스 기준으로 리소스 읽어오는 기능 부재
- ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재
- 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족하다
인터페이스 둘러보기
- 상속 받은 인터페이스
- 주요메소드
- 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: 웹 애플리케이션 루트에서 상대 경로로 리소스 찾는다
- ...
리소스 읽어오기
-
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
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 프레임워크 핵심 기술] 4-1. 데이터 바인딩 추상화-PropertyEditor (0) | 2019.10.06 |
---|---|
[스프링 프레임워크 핵심 기술] 3-2. Vaildation 추상화 (0) | 2019.10.06 |
[스프링 프레임워크 핵심 기술] 2-9. IoC컨테이너-ResourceLoader (0) | 2019.10.06 |
[스프링 프레임워크 핵심 기술] 2-8. IoC컨테이너-ApplicationEventPublisher (0) | 2019.10.06 |
[스프링 프레임워크 핵심 기술] 2-7. IoC컨테이너-MessageSource (0) | 2019.10.06 |
댓글