将messageSource移至applicationContext会导致默认messageSource在dispatcher-servlet上下文中不可见
问题内容:
我有一个webapp,其中dispatcher-servlet
在web.xml中定义了基本上下文,并加载了applicationContext
。
我已经messageSource
定义好dispatcher-servlet
并且正在将它注入到控制器中。
我还定义了我的服务applicationContext
,可以将它们注入到我的控制器中(在dispatcher-servlet
上下文中定义)。
但是,当我将for messageSource
的定义移至,applicationContext
以便某些服务可以解析消息时,dispatcher- servlet
上下文显示该上下文未找到messageSource
Bean,并且正在使用默认值,因此控制器会注入错误的Bean。
知道为什么messageSource定义applicationContext
对dispatcher-servlet
上下文不可见吗?
我看到我的messageSource bean已装入applicationContext
日志部分:
2058 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'messageSource'
2058 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'messageSource'
...
2082 [main] DEBUG org.springframework.web.context.support.XmlWebApplicationContext - Using MessageSource [mycommons.spring.ResourceBundleMessageSourceWithDefaultResolution: basenames=[messages]]
我在加载中看到此日志dispatcher-servlet
:
3858 [main] DEBUG org.springframework.web.context.support.XmlWebApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@55611ed3]
问题答案:
这就是它的工作方式。所述messageSource
豆 必须 在它被使用的上下文中定义。从父级上下文到子级将不会“继承”它。
这有点回溯到Spring 1.x的早期,并且此后从未真正改变过。
必须直接驻留在servlet appcontext中的许多“魔术豆”就是其中之一。