我有一个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/

10-09 10:07