Java NoSuchMessageException-Spring重载ResourceBundleMessageSource vs ResourceBundleMessageSource
我定义了以下Springbean:Java NoSuchMessageException-Spring重载ResourceBundleMessageSource vs ResourceBundleMessageSource,java,spring,Java,Spring,我定义了以下Springbean: <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>classpath:messages</value&
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:messages</value>
</list>
</property>
</bean>
而且效果很好。但当我试图替换时:
org.springframework.context.support.ReloadableResourceBundleMessageSource
与:
org.springframework.context.support.ResourceBundleMessageSource
我得到一个org.springframework.context.NoSuchMessageException
使用org.springframework.context.support.ResourceBundleMessageSource
时会发生什么情况?是一种替代方法,它能够在应用程序运行时刷新消息。它还更强大,因为您不仅限于类路径上的包,而且还可以从其他位置加载文件
使用ResourceBundleMessageSource
进行更改时需要重新启动应用程序,因为ResourceBundleMessageSource
在更改包时不会重新加载包。classpath:
前缀也需要删除。这是因为这两个类的工作方式:
使用JDK类来完成它的任务:。它委托It来加载捆绑包。基本上,您提供给ResourceBundleMessageSource
的捆绑包必须符合ResourceBundleMessageSource
的期望和流程ResourceBundle
不知道如何处理ResourceBundle
前缀,因此失败classpath:
- 另一方面,
更“聪明”,知道如何从其他地方加载包,而不仅仅是类路径。它与Spring类一起工作:。当您向ReloadableResourceBundleMessageSource
提供一个捆绑包时,由于它可以从不同的位置加载文件,您必须明确指定位置并说“我的文件在类路径上”ReloadableResourceBundleMessageSource
org.springframework.context.support.ResourceBundleMessageSource