Spring可重新加载属性可以一次访问

时间:2012-10-11 11:56:50

标签: spring localization

我无法找到一种方法来获取ReloadableResourceBundleMessageSource可重新加载的功能,并且可以通过语言环境一次访问Properties / all消息。 ReloadableResourceBundleMessageSource API不提供除代码和lang之外的任何内容的访问权限......由于成员可见性,ReloadableResourceBundleMessageSource甚至无法扩展为访问属性。

知道如何拥有可重新加载的属性并立即访问它们吗?

1 个答案:

答案 0 :(得分:1)

我只是对此进行了编码,希望它有效但你需要优化一些东西,我想这个方法可以是静态的,或者如果你需要它来成为一个bean,那么从基类中获取basename和locale。

package mx.gob.jgtjo.apps.schedule.web.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.context.support.ReloadableResourceBundleMessageSource;

public class CustomMessageResolver extends
          ReloadableResourceBundleMessageSource {

     public CustomMessageResolver() {

     }

     public Map<Object, Object> loadAllMessagesByLocale(String basename,
               Locale locale) {

          List<String> fileNames = super
                    .calculateAllFilenames(basename, locale);

          Map<Object, Object> messagesByLocale = new HashMap<Object, Object>();

          for (String fileName : fileNames) {

               PropertiesHolder holder = super.getProperties(fileName);

               for (Entry<Object, Object> entry : holder.getProperties()
                         .entrySet()) {

                    messagesByLocale.put(entry.getKey(), entry.getValue());
               }

          }

          return messagesByLocale;

     }
}

更新:我找到了一种从指定的基本名称中获取所有属性的更好方法:

public class CustomMessageResolver extends
          ReloadableResourceBundleMessageSource {

     public CustomMessageResolver() {

     }

     public Map<Object, Object> loadAllMessagesByLocale(String basename,
               Locale locale) {

          Map<Object, Object> messagesByLocale = new HashMap<Object, Object>();

          PropertiesHolder holder = super.getMergedProperties(locale);

          for (Entry<Object, Object> entry : holder.getProperties().entrySet()) {

               messagesByLocale.put(entry.getKey(), entry.getValue());
          }

          return messagesByLocale;

     }
}

这将从基类中获取基本名称。