본문 바로가기
개발/자바

enum 타입의 정적 리소스.class 파일 배열 만들기 (일반식, Stream)

by kakk789 2023. 2. 3.

코드 리뷰 (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"

 

반응형

댓글