MessageSource를 이용한 텍스트 메시지 처리

FRAMEWORK/SPRING 2013. 7. 15. 15:03

□ MessageSource 인터페이스
    ■ 정의
      - org.springframework.context.MessageSource interface
      - 메시지의 국제화를 지원.
    ■ 메서드
      - 지역 및 언어에 따라 알맞은 메시지를 구할 수 있음.

 public interface MessageSource {
    String getMessage(String code, Object[] args, Locale locale) 
        throws NoSuchMessageException;

    String getMessage(String code, Object[] args, String defaultMessage, Locale locale);

    String getMessage(MessageSourceResolvable resolvable, Locale locale)
        throws NoSuchMessageException;
 }

    ■ ApplicationContext 클래스
      ○ 메시지 처리
        - MessageSource 인터페이스를 상속 받고 있음. 
          (getMessage() 메서드를 이용하여 ApplicationContext로부터 지역 및 언어에 알맞은 메시지를 가져올 수 있음.)
        - 등록된 빈 객체 중에서 이름이 'messageSource'인 MessageSource 타입의 빈 객체를 이용하여 메시지를 가져옴.
      ○ 'messageSource'가 이름인 빈 객체 정의

 <bean id="messageSource"
     class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename">
        <value>message.greeting</value>
    </property>
 </bean>

         - basename 프로퍼티의 값은 메시지를 로딩할 때 사용할 ResourceBundle 의 베이스 이름.
           (베이스 이름 : 패키지를 포함한 완전한 이름이어야 함.)
         - message.greeting 값은 message 패키지에 있는 greeting 프로퍼티 파일로부터 메시지를 가져옴.
    ■ ResourceBundleMessageSource 클래스
      ○ 정의
        - MessageSource 인터페이스의 구현 클래스.
        - java.util.ResourceBundle을 이용하여 메시지를 읽어오는 MessageSource 구현체.
      ○ 한 개 이상의 프로퍼티 파일로부터 메시지 로딩
        - <list> 태그 이용.

 <bean id="messageSource"
     class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>message.greeting</value>
            <value>message.error</value>
        </list>
    </property>
 </bean>

    ■ 프로퍼티 파일
      ○ 특징
        - ResourceBundle은 프로퍼티 파일의 이름을 이용하여 언어 및 지역에 따른 메시지를 로딩.
      ○ message 프로퍼티 파일 파일명
        - message.properties : 기본 메시지. 시스템의 언어 및 지역에 맞는 프로퍼티 파일이 존재하지 않을 경우에 사용.
        - message_en.properties : 영어 메시지.
        - message_ko.properties : 한글 메시지.
        - message_en_UK.properties : 영국을 위한 영어 메시지
      ○ message 프로퍼티 파일
        - 각 프로퍼티 파일은 해당 언어에 알맞은 메시지를 포함.

 /* message_en.properties */

 greeting = Hello!
 /* message_ko.properties */

 <!-- '안녕하세요!'를 유니코드 값으로 변환한 값. -->
 greeting = \uc548\ub155\ud558\uc138\uc694!

    ■ 메시지 로딩
      - ApplicationContext.getMessage() 메서드를 이용.

 Local locale = Locale.getDefault();
 String greeting = context.getMessage("greeting", new Object[0], locale);

 Locale englishLocale = Locale.ENGLISH;
 String englishGreeting = context.getMessage("greeting", new Object[0], englishLocale);


  □ 빈 객체에서 메시지 이용
    ■ 빈 객체에서 MessageSource 사용 방법
      - ApplicationContextAware 인터페이스 구현 뒤, setApplicationContext() 메서드를 통해 전달받은 ApplicationContext의

        getMessage() 메서드를 이용하여 메시지 사용.
      - MessageSourceAware 인터페이스 구현 뒤, setMessageSource() 메서드를 통해 전달받은 MessageSource의 getMessage()

        메서드를 이용하여 메시지 사용.
    ■ MessageSourceAware 인터페이스를 사용하는 방법
      ○ 메서드
        - MessageSourceAware 인터페이스는 MessageSource를 전달받을 수 있는 메서드를 정의.

 public interface MessageSourceAware {
    void setMessageSource(MessageSource messageSource);
 }

      ○ 사용
        - MessageSourceAware 인터페이스를 구현한 빈 클래스는 setMessageSource() 메서드를 통해 전달받은 MessageSource를

          이용하여 필요한 메시지를 가져와 사용.

 public class LoginProcessorimplements MessageSourceAware {
    private MessageSource messageSource;

   public void setMessageSource(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    public void login(String username, String password) {
        ...
        Object[] args = new String[]{username};
        String failMessage = messageSource.getMessage("login.fail", args, locale);
        ...
    }
 }



[출처] 2. 스프링 DI (MessageSource를 이용한 텍스트 메시지 처리)|작성자 외계인셩

: