为什么只允许messageSource作为ResourceBundleMessageSource的bean id?

时间:2014-06-30 09:13:21

标签: java spring

对于Beans,我们通常可以自定义 id 属性,但对于ResourceBundleMessageSource类,如果我们不指定 id =&#34; messageSource&#34; < / strong>然后抛出异常。

<bean id="myMessageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="message" />
</bean>

抛出异常

Exception in thread "main" org.springframework.context.NoSuchMessageException: 

代码

new ClassPathXmlApplicationContext("springconfig.xml").getMessage("code");

2 个答案:

答案 0 :(得分:6)

简短回答 - 因为这就是他们设计的方式。

the reference guide中所述:

  

加载ApplicationContext时,它会自动搜索上下文中定义的MessageSource bean。 bean必须具有名称messageSource如果找到这样的bean,则对前面方法的所有调用都委托给消息源....如果ApplicationContext不能找到任何消息来源,实例化一个空的DelegatingMessageSource,以便能够接受对上面定义的方法的调用。

这只是一个搜索到的硬编码值。如果您没有提供具有该名称的bean,那么您最终会得到一个DelegatingMessageSource实例,该实例无法解析您的任何邮件,只会为您提供NoSuchMessageException

答案 1 :(得分:3)

摘自the documentation

  

加载ApplicationContext时,它会自动搜索上下文中定义的MessageSource bean。 bean必须具有名称messageSource。如果找到这样的bean,则对前面方法的所有调用都被委托给消息源。如果未找到任何消息源,ApplicationContext将尝试查找包含具有相同名称的bean的父级。如果是,则将该bean用作MessageSource。如果ApplicationContext找不到任何消息源,则会实例化一个空的DelegatingMessageSource,以便能够接受对上面定义的方法的调用。