-
Resource 추상화SPRING/스프링프레임워크 핵심개념 2021. 5. 18. 22:11
Resource 추상화
- java.net.URL을 추상화한 것
- 스프링 내부에서 많이 사용
추상화를 한 이유
- 클래스패스 기준으로 리소스 읽어오는 기능 부재
- ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재
- 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족
Resource 인터페이스를 구현한 구현체들의 목록
UrlResource URL을 기준으로 리소스를 읽어들임 지원하는 프로토콜 http, https, ftp, file, jar ClassPathResource 클래스패스를 기준으로 리소스를 읽어드림. classapth: FileSystemResource 파일시스템을 기준으로 리소스를 읽어드림. ServletContextResource 웹 어플리케이션 루트에서 상대 경로로 리소스를 찾는다. @Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resoureLoader; @Override public void run(ApplicationArguments args) throws Exception { // ClassPathResource("") = resourceLoader.getResource("classpath:") var cpr = new ClassPathResource("text.txt"); // 존재 여부 System.out.println(cpr.exists()); // classsPath System.out.println(cpr.getDescription()); // txt 파일의 내용 System.out.println(Files.readString(Path.of(cpr.getURI()))); // resourceLoader Resource resource = resoureLoader.getResource("classpath:text.txt"); System.out.println(resource.exists()); System.out.println(resource.getDescription()); System.out.println(Files.readString(Path.of(resource.getURI()))); // FileSystemResource("") = resourceLoader.getResource("file:") var fsr = new FileSystemResource("C:/dev/springResAbs/src/main/java/com/springresourceabs/demo/filetext.txt"); System.out.println(fsr.exists()); System.out.println(fsr.getDescription()); System.out.println(Files.readString(Path.of(fsr.getURI()))); // resourceLoader Resource resource2= resoureLoader.getResource("file:/C:/dev/springResAbs/src/main/java/com/springresourceabs/demo/filetext.txt"); System.out.println(resource2.exists()); System.out.println(resource2.getDescription()); System.out.println(Files.readString(Path.of(resource2.getURI()))); } }
'SPRING > 스프링프레임워크 핵심개념' 카테고리의 다른 글
데이터 바인딩 추상화: PropertyEditor (0) 2021.05.19 Validation추상화 (0) 2021.05.19 ResourceLoader (0) 2021.05.17 ApplicationEventPublisher (0) 2021.05.16 MessageSource - 다국어 (0) 2021.05.16