2.3 내장 리소스 확장

스프링은 다음 Resource 확장체를 포함한다.

2.3.1 UrlResource

UrlResource는 java.net.URL을 감싸고 가령 files, HTTP 타겟, FTP 타겟, 기타 등등에 평범하게 접근할 수 있는 어떠한 오브젝트들로든 접근할 수 있다. 모든 URL들은 표준화된 String 을 가지고, 적절히 표준화된 prefix들은 다른것들로 부터 하나의 URL 유형을 가리킨다. 이는 file: 을 파일 시스템 경로로 접근하기 위해 사용하고, HTTP 프로토콜을 통해 리소스에 접근하기 위해 http: 를, FTP 를 통해 리소스에 접근하기 위해 ftp:를 사용한다.

UrlResource는 명시적으로 UrlResource 생성자가 사용하는 자바 코드에 의해 생성되지만 자주 경로를 의미하는 String 인자를 받은 API 메소드를 콜할 때 생성되기도 한다. 마지막 경우에, 자바빈 PropertyEditor는 궁극적으로 생성한 Resource의 유형을 결정한다. 만약 경로 문자열이 잘 알려진 prefix(가령 classpath:)를 포함한다면, 그 프리픽스를 위한 적절하게 특별화한 Resource를 생성(! 이게 바로 아래 ClassPathResource)한다. 하지만 만약 prefix를 인식하지 못한다면 문자열이 표준 URL 문자열이라고 추측하고 UrlResource를 생성한다.

2.3.2 ClassPathResource

이 클래스는 클래스 경로에서 가져와야하는 자원을 나타낸다. 스레드 컨텍스트 클래스 로더, 주어진 클래스 로더 또는 리소스로드를 위한 클래스를 사용한다.

Resource구현은 java.io.File클래스 경로 자원이 만약 파일 시스템에 존재하지만 jar 파일에 존재하고 파일 시스템에 (서블릿 엔진 또는 환경에 관계없이) 확장되지 않았다면 클래스 경로 자원에 대한 것 인 것처럼 해석을 지원한다. 이 문제를 해결하기 위해 다양한 Resource구현은 항상 java.net.URL 으로 해결 방법을 지원합니다. (! 파일시스템으로 확장되었다면!!)

ClassPathResourceClassPathResource 생성자 를 명시 적으로 사용하여 Java 코드에 의해 작성되지만 String패스를 나타내는 인수 를 취하는 API 메소드를 호출 할 때 종종 암시 적으로 작성된다 . 후자의 경우, JavaBeans 는 문자열 경로 PropertyEditor에서 특수 접두사 (, classpath:)를 인식 하고 이러한 경우에 ClassPathResource를 만든다 .

2.3.3 FileSystemResource

java.io.Filejava.nio.file.Pathhandle 의 Resource 확장체이다 . 그것은 a File와 URL을 지원한다.

2.3.4 ServletContextResource

이는 관련 웹 응용 프로그램의 루트 디렉토리 내에서 상대 경로를 해석 하는 ServletContext의 Resource 확장체이다.

스트림 접근 및 URL 액세스를 항상 지원하지만 웹 응용 프로그램 아카이브가 확장될 때에만 java.io.File 접근을 허용한다. 자원이 물리적으로 파일 시스템에있는 경우에만 액세스를 허용한다. 파일 시스템에서 확장되어있던 안되어있던 또는 JAR이나 데이터베이스 (어쩌면 상상할 수있는)와 같은 다른 곳에서 직접 액세스되는지 여부는 실제로 서블릿 컨테이너에 의존한다.

2.3.5 InputStreamResource

InputStreamResourceResource주어진 InputStream에 대한 구현이다. 특정 Resource구현이 적용 되지 않는 경우에만 사용한다 . 특히 가능하면 ByteArrayResource 나 파일 기반 Resource구현을 선호한다.

다른 Resource구현과는 달리 , 이것은 이미 열린 리소스에 대한 설명 이다. 따라서 isOpen()에서 true를 반환한다. 리소스 설명자를 어딘가에 유지해야하거나 여러 번 스트림을 읽어야하는 경우에는 사용하면 안된다.

2.3.6 ByteArrayResource

주어진 바이트 배열에 대한 Resource 구현이다. 지정된 바이트 배열에 대해서 ByteArrayInputStream을 작성한다 .

한 번 사용하는 InputStreamResource에 의존하지 않고 지정된 바이트 배열의 내용을로드하는 데 유용하다.

찾아보니까, 파일 업로드할 때 쓰는 multipart 예제에서 이 리소스를 사용하더라고. getByte해서 읽어오는거.

참조 : http://blog.saltfactory.net/post-multipart-form-data-using-resttemplate-in-spring/

Last updated