package cn.org.rapid_framework.util.holder;
import java.util.Locale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.NoSuchMessageException;
/**
* 用于持有spring的messageSource,一个系统只能有一个MessageSourceHolder
*
*
* <br />
* <pre>
* 使用方法:
* <bean class="cn.org.rapid_framework.holder.MessageSourceHolder"/>
*
* 在java代码中则可以如此使用:
* BlogDao dao = (BlogDao)MessageSourceHolder.getBean("blogDao");
* </pre>
* @author badqiu
*/
public class MessageSourceHolder implements MessageSourceAware{
private static Log log = LogFactory.getLog(MessageSourceHolder.class);
private static MessageSource messageSource;
@SuppressWarnings("all")
public void setMessageSource(MessageSource message) throws BeansException {
if(this.messageSource != null) {
throw new IllegalStateException("MessageSourceHolder already holded 'messageSource'.");
}
this.messageSource = message;
log.info("holded messageSource,displayName:"+messageSource);
}
public static MessageSource getMessageSource() {
if(messageSource == null)
throw new IllegalStateException("'messageSource' property is null,MessageSourceHolder not yet init.");
return messageSource;
}
public String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException {
return getMessageSource().getMessage(resolvable, locale);
}
public String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException {
return getMessageSource().getMessage(code, args, locale);
}
public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
return getMessageSource().getMessage(code, args, defaultMessage, locale);
}
public static void cleanHolder() {
messageSource = null;
}
}