1. Resource
파일이나 설정 값에 접근하기 위한 인터페이스
public interface Resource extends InputStreamSource {
boolean exists();
boolean isReadable();
boolean isOpen();
boolean isFile();
URL getURL() throws IOException;
URI getURI() throws IOException;
File getFile() throws IOException;
ReadableByteChannel readableChannel() throws IOException;
long contentLength() throws IOException;
long lastModified() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}
Resource 구현체 목록
- UrlResource
java.net.URL을 래핑한 버전, 다양한 종류(ftp:, file:, http:, 등의 prefix로 접근유형 판단)의 Resource에 접근 가능하지만 기본적으로는 http(s)로 원격접근
- ClassPathResource
classpath(소스코드를 빌드한 결과(기본적으로 target/classes 폴더)) 하위의 리소스 접근 시 사용
ex) 어플 yml 파일, 화면 html 파일 등
- FileSystemResource
File을 다루기 위한 리소스 구현체
- SevletContextResource, InputStreamResource, ByteArrayResource
Servlet 어플리케이션 루트 하위 파일, InputStream(키보드 등), ByteArrayInput(바이트) 스트림을 가져오기 위한 구현체
2. ResourceLoader
접근할 때 사용하는 기능
위에 인터페이스는 isFile, isOpen등 단일 기능에 관한 것이었다면, 그렇게 처리한 파일(리소스)를 읽어오는 기능이다.
이는 Application Context에 구현되어 있다.
Application Context가 Resource service라는 Bean을 등록하면서, 자기 자신을 ctx에 injection 함.
@Service
public class ResourceService {
@Autowired
ApplicationContext ctx;
public void setResource() {
Resource myTemplate =
ctx.getResource("classpath:some/resource/path/myTemplate.txt");
// ctx.getResource("file:/some/resource/path/myTemplate.txt");
// ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");
// use myTemplate...
}
}
3. ResourcePatternResolver
스프링 ApplicationContext에서 ResourceLoader를 불러올 때 사용하는 Interface
위치 지정자 패턴("classpath:", "file:", "http:")에 따라 자동으로 Resource 로더 구현체를 선택
Application Context가 위 ResuorcePatternResolver를 상속받아 들고 있기 때문에, 위치 지정자 패턴에 따른 ResourceLoader의 사용이 가능
public interface ApplicationContext extends EnvironmentCapable,
ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
// Spring ApplicationContext interface
}
4. Application Context & Resources Paths
Context를 이루는 설정 값을 가져오는 방법들
// let's create an applicationContext
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx =
new FileSystemXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx =
new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");
// then you can use ctx as a Spring
Bear bear = (Bear) ctx.getBean("bear");
요즘에는 XML 기반으로 작업을 하지 않고, 어노테이션 기반으로 한다.
'Back > Spring' 카테고리의 다른 글
[Spring] Null Safety (0) | 2022.02.08 |
---|---|
[Spring] SpEL(Spring Expression Language) (0) | 2022.02.08 |
[Spring] Validation, Data Binding (0) | 2022.02.08 |
[Spring] AOP (0) | 2022.02.08 |
스프링(Spring)이란? (0) | 2022.01.11 |
댓글