본문 바로가기

Spring

MessageSource와 MessageSourceAccessor

(Spring 프레임워크 워크북의 내용을 정리한 것입니다.)

Properties 파일로 MessageSource를 관리 하기 위해서는
두가지의 방법을 사용 할 수 있다.

Spring에서는 ApplicationContext에서 기본적으로 MessageSource 기능을 포함하고 있는데 여기에 접근하기 위해서는 POJO 빈이 ApplicationContextAware 인터페이스를 구현해야 한다.
(이것은 POJO빈이 Spring에 종속된다)

간단하게 예를 보면..

public class SomeServiceImple implements SomeService, ApplicationContextAware {
.....
 private ApplicationContext context;
 
 @override
 public void setApplicationContext (ApplicationContext context) throws BeansException {
  this. context = context;
 }
 ...
 context.getMessage("login.null.exception", new Object[] { userId } , null));

 

ApplicationContext.xml

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



프로퍼티 파일은 message.properties 로 작성하면 된다.

두번째 방법은 MessageSourceAccessor 클래스를 사용하는 것이다.

....
private MessageSourceAccessor msAccessor = null;
public void setMessageSourceAccessor(MessageSourceAccessor msAccessor) {
 this.msAccessor = msAccessor;
}
...
msAccessor.getMessage("login.null.excpetion", new Exception());
...

 

ApplicationContext.xml

<bean id="someService" ... >
   <property name="messageSourceAccessor">
     <ref local = "messageSourceAccessor" />
    </property>
  </bean>

 <bean
  id="messageSourceAccessor"
  class="org.springframework.context.support.MessageSourceAccessor">
  <constructor-arg>
   <ref
    local="messageSource" />
  </constructor-arg>
 </bean>

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



Spring 프레임워크에 의존적이지 않고, 더 많은 API를 제공하고 ㅇㅆ기 때문에
좀 더 유용한 방법이라고 생각한다.