ResourceLoader
리소스를 읽어오는 기능을 제공하는 인터페이스
- ApplicationContext는 ResourceLoader를 상속받기 때문에 사용 가능하다.
- ResourceLoader를 이용하여 Resource를 읽어 올 수 있다.
- 리소스 존재 유무, 파일 이름 등 다양한 기능이 존재한다.
Resource 추상화
java.net.URL을 추상화한 것이며 스프링 내부에서 많이 사용하는 인터페이스
추상화한 이유
- 클래스 패스 기준으로 리소스를 읽어올 수 없었다.
- ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재
- 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하며 편의성 메서드가 부족
주요 Method
- getInputStream()
- exitst()
- isOpen
- getDescription()
구현체
- UrlResource
- ClassPathResource
- FileSystemResource
- ServletContextResource
구현체 확인해보기
ClassPathXml, FileSystemXmlApplicationContext
- ClassPath나 FileSystemApplicationContext로 읽으면 앞에 classpath: 같은 접두어를 붙일 필요가 없다.
ApplicationContext 기본 리소스
- ApplicationContext로 resourceLoader를 생성하였을 때는 기본적으로 SurvletContextResource로 리소스를 찾게 된다.
- ServletContextResource이기 때문에 웹 애플리케이션 루트에서 상대 경로로 리소스 찾는다. 그러므로 resoueces/test.txt를 읽어오지 않게 된다.
classpath: 를 붙여 리소스 타입 변경하기
- ServletResouce를 classpath로 읽어오고 싶을 경우 java.net.URL 접두어( + classpath:)를 앞에 붙이게 되면 강제로 가능하게 된다.
- 만약 file:를 붙인다면 FileSystemResource로 변경될 것이다.
'스프링 > 스프링 핵심 기술' 카테고리의 다른 글
데이터 바인딩 추상화: Editor, Converter, Formatter (0) | 2019.12.16 |
---|---|
Validation 추상화 (0) | 2019.12.16 |
7. IoC 컨테이너: ApplicationEventPublisher (0) | 2019.12.14 |
6. IoC 컨테이너: MessageSource (0) | 2019.12.14 |
5. IoC 컨테이너: Environment(Profile, Property) (0) | 2019.12.12 |