Java 如何使用Spring applicationContext从messageSource检索消息?

Java 如何使用Spring applicationContext从messageSource检索消息?,java,spring,Java,Spring,这是我的WEB-INF/applicationContext.xml: <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="WEB-INF/resources/messages"/> <property name="

这是我的WEB-INF/applicationContext.xml:

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/resources/messages"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="configurationService" class="com.services.ConfigurationService"/>
<bean id="companyService" class="com.services.CompanyService"/>
<bean id="messageService" class="com.services.MessageService"/>

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/resources/messages"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="configurationService" class="com.services.ConfigurationService"/>
<bean id="companyService" class="com.services.CompanyService"/>
<bean id="messageService" class="com.services.MessageService"/>
第二种方法是使用
FileSystemXmlApplicationContext
在我的
MessageService
中加载上下文。
applicationContext.getBean(“messageSource”)
不再返回
null
,但是
messageSource.getMessage(messageId,null,locale)
找不到任何消息(
NoSuchMessageException
)。这些消息当然存在于my.properties中

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/resources/messages"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="configurationService" class="com.services.ConfigurationService"/>
<bean id="companyService" class="com.services.CompanyService"/>
<bean id="messageService" class="com.services.MessageService"/>

这两个问题看起来都像是上下文问题,但我不知道在.jsp和java类中使用相同的.properties文件。另外,我希望在初始化期间在应用程序中加载消息一次,而不必每次在类中需要它们时都加载它们。谢谢你的帮助

我通过将.properties移动到类路径中的一个目录中,终于找到了答案。对于那些有兴趣的人:

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/resources/messages"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="configurationService" class="com.services.ConfigurationService"/>
<bean id="companyService" class="com.services.CompanyService"/>
<bean id="messageService" class="com.services.MessageService"/>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="resources/language/messages"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="messageService" class="com.services.MessageService" factory-method="getInstance"/>
注意:此代码不适用于
ReloadableResourceBundleMessageSource

它试图找到资源的方式似乎与
ResourceBundleMessageSource
不同

是否必须在
中提及
id=“messageSource”
?或者,如果不给予它,它会工作得很好吗?
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/resources/messages"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="configurationService" class="com.services.ConfigurationService"/>
<bean id="companyService" class="com.services.CompanyService"/>
<bean id="messageService" class="com.services.MessageService"/>