码迷,mamicode.com
首页 > 其他好文 > 详细

messages中的展示信息呢?

时间:2017-09-30 10:03:54      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:简单   存储结构   感知   异常   介绍   网络   over   修改   机制   

  中实现可重载的MessageSource简明教程原创 2017年09月28日引言: 在Spring Boot中messages中定义的信息,如果发生变更,则需要重启应用。那该如何实现才可以不重启应用的情况下替换messages中的展示信息呢?本文将给出一个简要的教程。
  
  的资源配置与读取在之前的文章中,已经介绍过了如何在Spring Boot中进行资源的配置和读取以及相应的测试代码,感兴趣的读者,可以参照Spring Boot中支持i18n简明教程。
  
  2 可重载的在Spring中定义了ReloadableResourceB www.thd1956.com/ undleMessageSource类,提供可自动刷新的Messages更新,即用户在无需重载应用的前提下,可以自动更新线上系统的messages展示信息。
  
  在其API文档中,其描述到如下信息:翻译为中文的信息如下:与JDK中的ResourceBundleMessageBundle相比,这个类使用Properties实例作为自定义的message存储结构,通过PropertiesPersister策略从Spring中Resource加载messages,同时也支持基于特定字符编码加载messages信息。 同时他也将检查xml的属性文件。
  
  从命名上也可以感知到其余我们默认使用的MessageSource实例对象,都是实现了同一个接口MessageSource,所以他们的使用接口和调用方式是一致的。
  
  3 覆盖Override实例根据网络上的教程,首先读取spring.messages的属性信息:这里只使用了3个属性,分别对应application.properties的属性信息,在初始化自定义的MessageSource实例中进行设置。
  
  然后覆盖Spring Boot默认的对象实例需要基于@Bean来声明某个对象实例:}之前的测试代码无需修改;但是在测试中一直在提示以下异常:从异常信息可以感知到,在Messages中并未找到对应的message,但是messages的资源文件并未变动,那问题出在哪里呢?
  
  经过分析,大概率应该是自定义的MessageSource实例已经被覆盖,但是我们在使用调用之时,并未获取争取的对象实例:那该如何解决呢?
  
  4 修复无法获取正确实例的问题4.1 设置实例对象获取顺序告诉Spring容器在基于同种类型加载实例之时,优先加载基于的对象实例。
  
  于是,我们声明覆盖对象的代码就变更为:}测试之后,可以正常获取message信息。
  
  4.2 基于实例的名称指定加载另外,我们还可以基于@Bean指定名称,然后在@Aut www.88qusheng.cn owired加载实例之时,基于实例名称来加载相应的实例。
  
  声明对象的代码在@Bean中增加一个命名:}在加载Me www.yiqianou.cn ssageSource之时,需要基于@Qualifier指定对象命名:然后经过测试,功能正确。
  
  5 总结提供非常简单易用的扩展机制,但是在自定义扩展之时,需要格外注意是否加载所期望的实例,这个需要进行通过@Primary或者@Bean的命名机制来指定解决冲突的问题。

messages中的展示信息呢?

标签:简单   存储结构   感知   异常   介绍   网络   over   修改   机制   

原文地址:http://www.cnblogs.com/wanmeiyule/p/7613551.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!