2015-11-24 3 views
0

Я хочу получить сообщение от свойств i18n в функции. Я могу получить сообщение в моем слое службы или контроллере этого утверждения:в SpringMVC getMessage из свойств i18n в функции вне контроллера

@Autowired 
private ApplicationContext appContext; 


public void myFunction(){ 
String errrorMsg = appContext.getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale()); 
} 

Но я хочу, чтобы получить эту i18n сообщение в функции, которая находится за пределами уровня службы или контроллера. Эта функция вызывается из моего уровня обслуживания. Как это сделать? Я попытался скопировать тот же код во внешнем классе, но я получаю NullPointerException

ответ

3

Инжектируйте MessageSource в вашу службу (вместо ApplicationContext).

В рамках этой услуги вы могли не использовать messageSource..getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());

Если вам нужна эта функциональность вне этой службы (в некоторых, например Not-Spring-Bean), то я бы передать MessageSource (и локаль) для этого другого класса ,

@Component 
public class MessageSourceExternalizer { 

    @Autowired 
    private MessageSource messageSource; 

    public String getMessage(String code) { 
     //Attention LocaleContextHolder.getLocale() is thread based, 
     //maybe you need some fallback locale 
     return messageSource.getMessage(code, new Object[0], LocaleContextHolder.getLocale()); 
    } } 

@Service 
public YourService { 

    @Autowired 
    private MessageSourceExternalizer messageSourceExternalizer; 

    public void yourServiceMethod() { 
     .... 
     YourNotSpringBean yourNotSpringBean 
      = new YourNotSpringBean(messageSourceExternalizer); 
     yourNotSpringBean.doSomething(...); 
    } } 


public class YourNotSpringBean { 

    private final MessageSourceExternalizer messageSourceExternalizer; 
    public YourNotSpringBean(MessageSourceExternalizer messageSourceExternalizer) { 
     this.messageSourceExternalizer = messageSourceExternalizer; 
    } 

    public void doSomething() { 
     .... 
     this.messageSourceExternalizer.getMessage("application.errorcode.sessionExpiry"); 
    } 

}