org.springframework.context.support.ReloadableResourceBundleMessageSource类的使用及代码示例

x33g5p2x  于2022-01-28 转载在 其他  
字(13.6k)|赞(0)|评价(0)|浏览(237)

本文整理了Java中org.springframework.context.support.ReloadableResourceBundleMessageSource类的一些代码示例,展示了ReloadableResourceBundleMessageSource类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ReloadableResourceBundleMessageSource类的具体详情如下:
包路径:org.springframework.context.support.ReloadableResourceBundleMessageSource
类名称:ReloadableResourceBundleMessageSource

ReloadableResourceBundleMessageSource介绍

[英]Spring-specific org.springframework.context.MessageSource implementation that accesses resource bundles using specified basenames, participating in the Spring org.springframework.context.ApplicationContext's resource loading.

In contrast to the JDK-based ResourceBundleMessageSource, this class uses java.util.Properties instances as its custom data structure for messages, loading them via a org.springframework.util.PropertiesPersister strategy from Spring Resource handles. This strategy is not only capable of reloading files based on timestamp changes, but also of loading properties files with a specific character encoding. It will detect XML property files as well.

Note that the basenames set as #setBasenames property are treated in a slightly different fashion than the "basenames" property of ResourceBundleMessageSource. It follows the basic ResourceBundle rule of not specifying file extension or language codes, but can refer to any Spring resource location (instead of being restricted to classpath resources). With a "classpath:" prefix, resources can still be loaded from the classpath, but "cacheSeconds" values other than "-1" (caching forever) might not work reliably in this case.

For a typical web application, message files could be placed in WEB-INF: e.g. a "WEB-INF/messages" basename would find a "WEB-INF/messages.properties", "WEB-INF/messages_en.properties" etc arrangement as well as "WEB-INF/messages.xml", "WEB-INF/messages_en.xml" etc. Note that message definitions in a previous resource bundle will override ones in a later bundle, due to sequential lookup.

This MessageSource can easily be used outside of an org.springframework.context.ApplicationContext: it will use a org.springframework.core.io.DefaultResourceLoader as default, simply getting overridden with the ApplicationContext's resource loader if running in a context. It does not have any other specific dependencies.

Thanks to Thomas Achleitner for providing the initial implementation of this message source!
[中]专门针对Spring的组织。springframework。上下文MessageSource实现,使用指定的基名访问资源包,参与Spring组织。springframework。上下文ApplicationContext的资源加载。
与基于JDK的ResourceBundleMessageSource不同,这个类使用java。util。属性实例作为消息的自定义数据结构,通过组织加载它们。springframework。util。来自Spring资源句柄的PropertiesPersister策略。该策略不仅能够基于时间戳更改重新加载文件,还能够加载具有特定字符编码的属性文件。它还将检测XML属性文件。
请注意,设置为#setBasenames属性的basenames的处理方式与ResourceBundleMessageSource的“basenames”属性略有不同。它遵循基本的ResourceBundle规则,即不指定文件扩展名或语言代码,但可以引用任何Spring资源位置(而不限于类路径资源)。使用“classpath:”前缀,仍然可以从类路径加载资源,但是在这种情况下,除了“-1”(永远缓存)之外的“cacheSeconds”值可能无法可靠地工作。
对于一个典型的web应用程序,消息文件可以放在web-INF中:例如,“web-INF/messages”基名称可以找到“web-INF/messages.properties”、“web-INF/messages_en.properties”等排列以及“web-INF/messages.xml”,“WEB-INF/messages_en.xml”等。请注意,由于顺序查找,前一个资源包中的消息定义将覆盖后一个资源包中的消息定义。
这个消息源可以很容易地在组织之外使用。springframework。上下文ApplicationContext:它将使用一个组织。springframework。果心伊奥。默认情况下使用DefaultResourceLoader,如果在上下文中运行,只需使用ApplicationContext的资源加载器覆盖即可。它没有任何其他特定的依赖项。
感谢Thomas Achleitner提供此消息源的初始实现!

代码示例

代码示例来源:origin: psi-probe/psi-probe

/**
 * Gets the reloadable resource bundle message source.
 *
 * @return the reloadable resource bundle message source
 */
@Bean(name = "messageSource")
public MessageSource getMessageSource() {
 logger.debug("Instantiated reloadableResourceBundleMessageSource");
 ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
 source.setBasename("/WEB-INF/messages");
 source.setCacheSeconds(1);
 source.setFallbackToSystemLocale(false);
 return source;
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void testReloadableResourceBundleMessageSourceWithInappropriateDefaultCharset() {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  ms.setBasename("org/springframework/context/support/messages");
  ms.setDefaultEncoding("unicode");
  Properties fileCharsets = new Properties();
  fileCharsets.setProperty("org/springframework/context/support/messages_de", "unicode");
  ms.setFileEncodings(fileCharsets);
  ms.setFallbackToSystemLocale(false);
  try {
    ms.getMessage("code1", null, Locale.ENGLISH);
    fail("Should have thrown NoSuchMessageException");
  }
  catch (NoSuchMessageException ex) {
    // expected
  }
}

代码示例来源:origin: BroadleafCommerce/BroadleafCommerce

/**
 * The super implementation ensures the basenames defined at the beginning take precedence. We require the opposite in
 * order to be in line with previous assumptions about the applicationContext merge process (meaning, beans defined in
 * later applicationContexts take precedence). Thus, this reverses <b>basenames</b> before passing it up to the super
 * implementation.
 * 
 * @param basenames
 * @param resourceBundleExtensionPoint
 * @see {@link ReloadableResourceBundleMessageSource#setBasenames(String...)}
 */
@Resource(name="blMessageSourceBaseNames")
@Override
public void setBasenames(String... basenames) {
  CollectionUtils.reverseArray(basenames);
  super.setBasenames(basenames);
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void testReloadableResourceBundleMessageSourceWithInappropriateGermanCharset() {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  ms.setBasename("org/springframework/context/support/messages");
  ms.setFallbackToSystemLocale(false);
  Properties fileCharsets = new Properties();
  fileCharsets.setProperty("org/springframework/context/support/messages_de", "unicode");
  ms.setFileEncodings(fileCharsets);
  assertEquals("message1", ms.getMessage("code1", null, Locale.ENGLISH));
  assertEquals("message2", ms.getMessage("code2", null, Locale.GERMAN));
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void testReloadableResourceBundleMessageSourceWithDefaultCharset() {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  ms.setBasename("org/springframework/context/support/messages");
  ms.setDefaultEncoding("ISO-8859-1");
  assertEquals("message1", ms.getMessage("code1", null, Locale.ENGLISH));
  assertEquals("nachricht2", ms.getMessage("code2", null, Locale.GERMAN));
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void testReloadableResourceBundleMessageSourceStandalone() {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  ms.setBasename("org/springframework/context/support/messages");
  assertEquals("message1", ms.getMessage("code1", null, Locale.ENGLISH));
  assertEquals("nachricht2", ms.getMessage("code2", null, Locale.GERMAN));
}

代码示例来源:origin: stackoverflow.com

@Bean
public MessageSource messageSource() {
  ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
  messageSource.setBasename("/WEB-INF/propFiles/messages");
  messageSource.setDefaultEncoding("UTF-8");
  return messageSource;
}

代码示例来源:origin: at.chrl/chrl-spring

@Bean(name = "messageSource")
public MessageSource messageSource() {
  ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
  messageSource.setBasename(MESSAGE_SOURCE);
  messageSource.setCacheSeconds(5);
  return messageSource;
}

代码示例来源:origin: spring-projects/spring-hateoas

/**
 * The {@link MessageSourceAccessor} to provide messages for {@link ResourceDescription}s being rendered.
 * 
 * @return
 */
@Bean
public MessageSourceAccessor linkRelationMessageSource() {
  try {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:rest-messages");
    return new MessageSourceAccessor(messageSource);
  } catch (Exception o_O) {
    throw new BeanCreationException("resourceDescriptionMessageSourceAccessor", "", o_O);
  }
}

代码示例来源:origin: ihaolin/antares

@Bean
  public MessageSource messageSource(){
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:i18n/messages");
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setUseCodeAsDefaultMessage(true);
    return messageSource;
  }
}

代码示例来源:origin: spring-projects/spring-data-rest

/**
 * The {@link MessageSourceAccessor} to provide messages for {@link ResourceDescription}s being rendered.
 *
 * @return
 */
@Bean
public MessageSourceAccessor resourceDescriptionMessageSourceAccessor() {
  try {
    PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
    propertiesFactoryBean.setLocation(new ClassPathResource("rest-default-messages.properties"));
    propertiesFactoryBean.afterPropertiesSet();
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:rest-messages");
    messageSource.setCommonMessages(propertiesFactoryBean.getObject());
    messageSource.setDefaultEncoding("UTF-8");
    return new MessageSourceAccessor(messageSource);
  } catch (Exception o_O) {
    throw new BeanCreationException("resourceDescriptionMessageSourceAccessor", "", o_O);
  }
}

代码示例来源:origin: org.hsweb/hsweb-web-controller

@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource() {
  ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
  reloadableResourceBundleMessageSource.setBasenames("classpath*:messages/", "classpath*:valid/validation");
  reloadableResourceBundleMessageSource.setUseCodeAsDefaultMessage(false);
  reloadableResourceBundleMessageSource.setFallbackToSystemLocale(true);
  return reloadableResourceBundleMessageSource;
}

代码示例来源:origin: stackoverflow.com

@Bean
 public MessageSource messageSource() {
 ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
 messageSource.setBasenames( "classpath:messages" );
 // if true, the key of the message will be displayed if the key is not
 // found, instead of throwing a NoSuchMessageException
 messageSource.setUseCodeAsDefaultMessage( true );
 messageSource.setDefaultEncoding( "UTF-8" );
 // # -1 : never reload, 0 always reload
 messageSource.setCacheSeconds( 0 );
 return messageSource;
 }

代码示例来源:origin: spring-projects/spring-framework

@Test
public void testReloadableResourceBundleMessageSourceWithNonConcurrentRefresh() throws InterruptedException {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  ms.setBasename("org/springframework/context/support/messages");
  ms.setCacheSeconds(1);
  ms.setConcurrentRefresh(false);
  // Initial cache attempt
  assertEquals("message1", ms.getMessage("code1", null, Locale.ENGLISH));
  assertEquals("nachricht2", ms.getMessage("code2", null, Locale.GERMAN));
  Thread.sleep(1100);
  // Late enough for a re-cache attempt
  assertEquals("message1", ms.getMessage("code1", null, Locale.ENGLISH));
  assertEquals("nachricht2", ms.getMessage("code2", null, Locale.GERMAN));
}

代码示例来源:origin: stackoverflow.com

@Bean
 public ReloadableResourceBundleMessageSource messageSource(){
   ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
   String[] resources= {"classpath:labels","classpath:message"};
   messageSource.setBasenames(resources);
   return messageSource;
 }

代码示例来源:origin: spring-projects/spring-framework

@Test
public void testReloadableResourceBundleMessageSourceWithCommonMessages() {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  Properties commonMessages = new Properties();
  commonMessages.setProperty("warning", "Do not do {0}");
  ms.setCommonMessages(commonMessages);
  ms.setBasename("org/springframework/context/support/messages");
  assertEquals("message1", ms.getMessage("code1", null, Locale.ENGLISH));
  assertEquals("nachricht2", ms.getMessage("code2", null, Locale.GERMAN));
  assertEquals("Do not do this", ms.getMessage("warning", new Object[] {"this"}, Locale.ENGLISH));
  assertEquals("Do not do that", ms.getMessage("warning", new Object[] {"that"}, Locale.GERMAN));
}

代码示例来源:origin: stackoverflow.com

@Configuration
public class LocalizationConfiguration {

  @Bean
  public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messages = new ReloadableResourceBundleMessageSource();
    messages.setBasenames("classpath:beanValidation", "classpath:errors");
    messages.setDefaultEncoding("UTF-8");
    return messages;
  }

}

代码示例来源:origin: com.intoverflow.booster/booster-config

@Bean
public MessageSource messageSource() {
  // TODO database MessageSource
  ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();
  bean.addBasenames("classpath:message", "classpath:ValidationMessages");
  for (String s : MessageResources.DEFAULT_MESSAGE_RESOURCE_BASES.split("[,;\\s]+")) {
    bean.addBasenames(fetchBasenames(s));
  }
  bean.setUseCodeAsDefaultMessage(false);//true
  bean.setDefaultEncoding("UTF-8");
  bean.setCacheSeconds(60);
  return bean;
}

代码示例来源:origin: ch.sahits.game/OpenPatricianDisplay

@Bean
public ReloadableResourceBundleMessageSource resourceReference() {
  ReloadableResourceBundleMessageSource bundle = new ReloadableResourceBundleMessageSource();
  bundle.setBasename("/resources");
  bundle.setFallbackToSystemLocale(false);
  return bundle;
}
@Bean

代码示例来源:origin: com.soento/soento-core

public MultipleMessageSource() {
  super.setBasename("classpath*:/i18n/*");
  super.setDefaultEncoding("UTF-8");
  super.setUseCodeAsDefaultMessage(true);
}

相关文章

微信公众号

最新文章

更多

ReloadableResourceBundleMessageSource类方法