对于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");
答案 0 :(得分:6)
简短回答 - 因为这就是他们设计的方式。
如the reference guide中所述:
加载
ApplicationContext
时,它会自动搜索上下文中定义的MessageSource
bean。 bean必须具有名称messageSource
。如果找到这样的bean,则对前面方法的所有调用都委托给消息源....如果ApplicationContext
不能找到任何消息来源,实例化一个空的DelegatingMessageSource
,以便能够接受对上面定义的方法的调用。
这只是一个搜索到的硬编码值。如果您没有提供具有该名称的bean,那么您最终会得到一个DelegatingMessageSource
实例,该实例无法解析您的任何邮件,只会为您提供NoSuchMessageException
。
答案 1 :(得分:3)
加载ApplicationContext时,它会自动搜索上下文中定义的MessageSource bean。 bean必须具有名称messageSource。如果找到这样的bean,则对前面方法的所有调用都被委托给消息源。如果未找到任何消息源,ApplicationContext将尝试查找包含具有相同名称的bean的父级。如果是,则将该bean用作MessageSource。如果ApplicationContext找不到任何消息源,则会实例化一个空的DelegatingMessageSource,以便能够接受对上面定义的方法的调用。