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

aj_*_*blk 2 java spring

对于Beans,通常我们可以自定义id属性,但对于ResourceBundleMessageSource类,如果我们不指定id ="messageSource",则抛出异常.

<bean id="myMessageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="message" />
</bean>
Run Code Online (Sandbox Code Playgroud)

它抛出异常

Exception in thread "main" org.springframework.context.NoSuchMessageException: 
Run Code Online (Sandbox Code Playgroud)

代码

new ClassPathXmlApplicationContext("springconfig.xml").getMessage("code");
Run Code Online (Sandbox Code Playgroud)

Dun*_*nes 6

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

参考指南中所述:

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

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