(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));
.....
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>
<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());
...
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>
<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를 제공하고 ㅇㅆ기 때문에
좀 더 유용한 방법이라고 생각한다.