Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoSuchMessageException-Spring重载ResourceBundleMessageSource vs ResourceBundleMessageSource_Java_Spring - Fatal编程技术网

Java NoSuchMessageException-Spring重载ResourceBundleMessageSource vs ResourceBundleMessageSource

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&

我定义了以下Springbean:

<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:
前缀也需要删除。这是因为这两个类的工作方式:

  • ResourceBundleMessageSource
    使用JDK类来完成它的任务:。它委托It来加载捆绑包。基本上,您提供给
    ResourceBundleMessageSource
    的捆绑包必须符合
    ResourceBundle
    的期望和流程
    ResourceBundle
    不知道如何处理
    classpath:
    前缀,因此失败

  • 另一方面,
    ReloadableResourceBundleMessageSource
    更“聪明”,知道如何从其他地方加载包,而不仅仅是类路径。它与Spring类一起工作:。当您向
    ReloadableResourceBundleMessageSource
    提供一个捆绑包时,由于它可以从不同的位置加载文件,您必须明确指定位置并说“我的文件在类路径上”


是的,你完全正确。非常感谢。但是为什么classpath关键字在这里如此重要?@user3663882:我在回答中添加了更多细节。
org.springframework.context.support.ResourceBundleMessageSource