[Spring] ResourcePatternResolver 인터페이스
2022. 10. 3. 14:43ㆍJAVA/Spring
1. ResourcePatternResolver 인터페이스는 무엇인가?
- ResourcePatternResolver 인터페이스는 ResourceLoader 인터페이스를 상속받은 확장판 인터페이스입니다.
- ResourcePatternResolver 인터페이스의 getResources 메서드는 매개변수로 문자열 타입의 위치 패턴(locationPattern)을 입력받아 해당 패턴에 만족하는 자원들을 가져오는 기능입니다.
- ApplicationContext 인터페이스는 ResourcePatternResolver 인터페이스를 상속받기 때문에 getResources 메서드를 호출하여 여러 자원들을 가져올 수 있습니다.
ResourcePatternResolver 인터페이스 정의
public interface ResourcePatternResolver extends ResourceLoader {
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
Resource[] getResources(String locationPattern) throws IOException;
}
- String CLASSPATH_ALL_URL_PREFIX = "classpath*:" : 클래스패스로부터 매칭되는 모든 자원들을 대상으로 하기 위해서 정의한 접두어입니다.
- 예를 들어 "classpath*:/config/beans.xml" 위치 패턴같은 경우에 자리 표시자(placeholder)가 없는 특정 파일의 경로가 됩니다.
- 클래스 패스 경로안에 있는 JAR 파일이나 다른 디렉토리 파일같은 경우에는 다수의 파일들을 포함시킬 수 있습니다. 이때 "classpath*:/config/*.xml"와 같이 위치 패턴을 설정할 수 있습니다.
PathMatchingResourcePatternResolver 클래스
- ResourcePatternResolver 인터페이스의 구현체
- ApplicationContext 인터페이스 외부에서 사용할 수 있는 독립 실행 구현체
- Resource[] 빈 속성들을 채우기 위해 ResourceArrayPropertyEditor에서도 사용됨
- 특정 자원의 위치 경로에서 한개 이상의 자원들을 가져올 수 있음
- 자원의 위치 경로는 특정 한개의 파일을 가리킬 수 있고 접두어인 "classpath*:"만 포함하거나 접두어와 와일드카드를 포함한 정규식이 될 수 있습니다.
- 예를 들어 "classpath*:test.txt", "classpath*:test*.txt"가 될 수 있습니다.
- 자원의 위치 경로는 특정 한개의 파일을 가리킬 수 있고 접두어인 "classpath*:"만 포함하거나 접두어와 와일드카드를 포함한 정규식이 될 수 있습니다.
- 표준 ApplicationContext 인터페이스의 기본 ResourceLoader는 ResourcePatternResolver 인터페이스의 구현체는 PathMatchingResourcePatternResolver의 인스턴스입니다.
2. ResourcePatternResolver.getResources 예제
@SpringBootTest
public class ResourceLoaderApplicationTest {
@Qualifier("webApplicationContext")
@Autowired
private ApplicationContext ctx;
...
@Test
public void getResourcesTest() throws IOException {
Resource[] resources = ctx.getResources("classpath*:/test*.txt");// test 이름을 시작하는 txt파일들을 가져옴
for(Resource resource : resources){
String content = Files.readString(Path.of(resource.getURI()));
System.out.println(content);
}
}
}
위 예제의 내용은 resources 디렉토리(클래스 패스)에 있는 test로 시작하는 txt파일을 가져와서 파일 내용을 출력하는 예제입니다. 실행 결과는 다음과 같습니다.
test.txt의 첫번째 줄
test.txt의 두번째 줄
test.txt의 세번째 줄
test2.txt의 첫번째 줄
test2.txt의 두번째 줄
test2.txt의 세번째 줄
위 예제에서 주목할점은 ApplicationContext 인터페이스가 ResourcePatternResolver 인터페이스를 상속받았기 때문에 getResources 메서드를 호출할 수 있었고 파일 경로로써 접두어인 "classpath*:"와 와일드 카드(test*.txt)를 사용했음을 볼 수 있습니다.
References
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#resources-resourcepatternresolver
source code : https://github.com/yonghwankim-dev/spring_study/blob/master/resource_loader/src/test/java/kr/yh/ResourceLoaderApplicationTest.java
'JAVA > Spring' 카테고리의 다른 글
[Springboot] 23. SpringApplication #1 Banner, Customizing (0) | 2022.10.12 |
---|---|
[Spring] ResourceLoaderAware 인터페이스 (0) | 2022.10.04 |
[Spring] ResourceLoader 인터페이스 (0) | 2022.09.30 |
[Spring] Resource 인터페이스와 Resource 인터페이스 구현체 (0) | 2022.09.25 |
[Spring][IoC] ApplicationEventPublisher (0) | 2022.09.23 |