Section 2. Resource / Validation

dev.jhjhj·2022년 2월 13일
0

1. Resource 추상화

org.springframework.core.io.Resource

특징

  • java.net.URL을 추상화했다. → java.net.URL을 Spring core io Resource로 감싼 것

추상화 한 이유는 ?

  • 기존 java.net.URL 에는 classpath를 기준으로 리소스를 읽어오는 기능이 없었다.
  • 기존 java.net.URL 에는 ServletContext를 기분으로 상대 경로를 읽어오는 기능이 없었다.

구현체

소스 읽어오기

Resource의 타입은 location 문자열과 ApplicationContext 타입에 따라 결정된다.

  • 예시

    • ClassPathXmlApplicationContext -> ClassPathResource
    • FileSystemXmlApplicationContext -> FileSystemResource
    • WebApplicationContext -> ServletContextResource
  • 리소스 로더에 prefix classpath:/ 가 있을 때

    • 리소스 로더의 타입은 AnnotationConfigServletWebServerApplicationContext
    • 해당 리소스 타입은 ClassPathResource
      @Autowired
          ApplicationContext resourceLoader;
      
          @Override
          public void run(ApplicationArguments args) throws Exception {
      				// 리소스 로더 타입은 class org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
              System.out.println("resourceLoader.getClass() : " + resourceLoader.getClass());
      
              Resource resource = resourceLoader.getResource("classpath:/test.txt");
              // 리소스 타입은 class org.springframework.core.io.ClassPathResource
      				System.out.println("resource.getClass() = " + resource.getClass());
          }
  • 리소스 로더를 prefix 없이 받을 때

    • 리소스 로더의 타입은 AnnotationConfigServletWebServerApplicationContext

    • 해당 리소스 타입은 ServletContextResource → 디폴트로 ServletContextResource로 받는다.

      @Autowired
          ApplicationContext resourceLoader;
      
          @Override
          public void run(ApplicationArguments args) throws Exception {
      				// 리소스 로더 타입은 class org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
              System.out.println("resourceLoader.getClass() : " + resourceLoader.getClass());
      
              Resource resource = resourceLoader.getResource("test.txt");
              // 리소스 타입은 class org.springframework.core.io.ServletContextResource
      				System.out.println("resource.getClass() = " + resource.getClass());
          }
  • 따라서 Resource의 경로를 작성할 때는 Prefix를 사용하는 것을 권장한다. (명시적이고 가시성 좋음)

📕 https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#resources-as-dependencies




2. Validation 추상화

org.springframework.validation.Validator

객체를 검증하기 위해 사용하는 인터페이스 이다.

애노테이션을 사용하여 객체를 검증한다.

인터페이스

출처 : [인프런 강의] 백기선 - 스프링 프레임워크 핵심기술

profile
어제보다 더 나은

0개의 댓글