ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.