개발/자바
enum 타입의 정적 리소스.class 파일 배열 만들기 (일반식, Stream)
kakk789
2023. 2. 3. 18:18
코드 리뷰 (Main)
1. enum타입.values()
- StaticResourceLocation 은 enum 타입이고 values 함수는 enum 클래스가 갖는 모든 상수 값을 배열의 형태로 리턴
(메소드는 X, 오로지 상수만)
2. Stream.of
- 배열을 스트림화
3. flatMap ()
- 배열을 1차원으로 평면화 시킴
4. toArray(String[]::new)
- 스트링 배열화 시키기
import java.util.Arrays;
import java.util.stream.Stream;
class Main
{
public enum StaticResourceLocation {
CSS("/css/**"),
JAVA_SCRIPT("/js/**"),
IMAGES("/images/**"),
WEB_JARS("/webjars/**"),
FAVICON("/**/favicon.ico");
private final String[] patterns;
StaticResourceLocation(String... patterns) {
this.patterns = patterns;
}
public Stream<String> getPatterns() {
return Arrays.stream(this.patterns);
}
public String getValue() {
return patterns[0];
}
}
public static void main(String[] args)
{
/*1번 방안 - 일반식*/
for(StaticResourceLocation aaa: StaticResourceLocation.values())
{
// 전체 상수 출력 (스트링 타입 X)
//(CSS, JAVA_SCRIPT, IMAGES, WEB_JARS, FAVICON)
System.out.println(aaa);
// 상수에 연결된 값
//(/css/**, /js/**, /images/**, /webjars/**, /**/favicon.ico)
System.out.println(aaa.getValue());
System.out.println("#########################");
}
System.out.println("-------------------------");
/*2번 방안 - Stream 이용 : 바로 출력*/
// 전체 상수 출력 (스트링 타입 X)
//(CSS, JAVA_SCRIPT, IMAGES, WEB_JARS, FAVICON)
Stream.of(StaticResourceLocation.values()).forEach(System.out::println);
System.out.println("#########################");
// 상수에 연결된 값 출력(스트링 타입 X)
//( /css/**, /js/**, /images/**, /webjars/**, /**/favicon.ico )
Stream.of(StaticResourceLocation.values())
.flatMap(StaticResourceLocation::getPatterns)
.forEach(System.out::println);
/*2.1번 방안 - Stream 이용 : 스트링 배열에 저장*/
//("/css**", "/js/**", "/images/**", "/webjars/**", "/**/favicon.ico")
String[] test =
Stream.of(StaticResourceLocation.values())
.flatMap(StaticResourceLocation::getPatterns)
.toArray(String[]::new);
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$");
// String 형식의 배열로 저장됨 (주소값 저장되어 있음 for문으로 꺼내 써야함)
System.out.println(test);
}
}

응용
- 스프링 시큐리티에서 아래와 같이 사용 가능
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(Stream.of(StaticResourceLocation.values())
.flatMap(StaticResourceLocation::getPatterns).toArray(String[]::new));
}
결과 값
해당 값이 들어가게 됌
##############################################
"/css**", "/js/**", "/images/**", "/webjars/**", "/**/favicon.ico"
반응형