我有一个webapp,其中在web.xml中定义了基本的dispatcher-servlet
上下文,并加载了applicationContext
。
我在messageSource
中定义了dispatcher-servlet
,并将其注入(inject)到 Controller 中。
我还在applicationContext
中定义了我的服务,并且可以将它们注入(inject)到我的 Controller 中(在dispatcher-servlet
上下文中定义)。
但是,当我将messageSource
的定义移至applicationContext
以便某些服务可以解析消息时,dispatcher-servlet
上下文表明它没有找到messageSource
bean,并且正在使用默认值,因此 Controller 会注入(inject)错误的bean。
知道为什么applicationContext
上下文看不到dispatcher-servlet
中的messageSource定义吗?
我看到我的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
bean必须在使用它的上下文中定义。从父级上下文到子级将不会“继承”它。
这有点回溯到Spring 1.x的早期,并且此后从未真正改变过。
必须直接驻留在servlet appcontext中的许多“魔 bean ”就是其中之一。
关于java - 将messageSource移至applicationContext会导致默认messageSource在dispatcher-servlet上下文中不可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5166244/