'스프링긴가민가테스트'에 해당되는 글 1건

  1. 2009.03.20 스프링 긴가민가 테스트 1. MessageSource 에 여러개의 메세지파일이......
봄싹2009.03.20 17:00
실험 1.
메세지 소스에다가 ... 두개의 메세지 파일을 등록을 해주었습니다.

 <bean id=" messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>/WEB-INF/messages/MessageResources_a_ko</value>
                <value>/WEB-INF/messages/MessageResources_b_ko</value>
            </list>
        </property>
        <property name="cacheSeconds" value="5" />
    </bean>

그런데 해당 파일에.. 내용은 같은 키파일들이 한파일에 중복되고.. 또 두 파일에 중복이 되어있습니다..

MessageResources_a_ko.properties 파일내용.
error.what=가
error.what=나
error.what=다

MessageResources_b_ko.properties 파일내용.
error.what=라
error.what=마
error.what=바

이렇게 했을때..
메세지 소스에서.. getMessage("error.what"....) ;

이런식으로 메세지를 꺼냇을때... 어떤것이... 찍힐까요?

실험결과 !

너무나 당현한건가 할지는 모르겟지만.. 정답은 "다" 이네용;; ㅋ

org.springframework.context.support.ReloadableResourceBundleMessageSource 264 line
    protected String resolveCodeWithoutArguments(String code, Locale locale) {
        if (this.cacheMillis < 0) {
            PropertiesHolder propHolder = getMergedProperties(locale);
            String result = propHolder.getProperty(code);
            if (result != null) {
                return result;
            }
        }
        else {
            for (int i = 0; i < this.basenames.length; i++) {
                List filenames = calculateAllFilenames(this.basenames[i], locale);
                for (int j = 0; j < filenames.size(); j++) {
                    String filename = (String) filenames.get(j);
                    PropertiesHolder propHolder = getProperties(filename);
                    String result = propHolder.getProperty(code);
                    if (result != null) {
                        return result;
                    }
                }
            }
        }
        return null;
    }

대충 보면 ... 빈의 이름으로 루프를 돌다가 프로퍼티에서 코드로 값을 꺼내고 있으면 ~
바로 리턴해버리니까 .. 첫번째 파일의 메세지중에서 나올껏이고..
프로퍼티도.. key 형태이니.. 마지막에 들어간 값 하나만 존재 하니..
결국 첫번째 파일의 마지막 키값이 들어가네요~

역시 긴가 민가 할때는 소스를... 한번쯤 봐주면... 명확한 답이.. 음트트트트.. ㅋ
맞겠지 아마.. ?ㅋ 이유가.. ?ㅋ
Posted by is윤군