gpt4 book ai didi

java - 将 messageSource 移动到 applicationContext 会导致默认 messageSource 在 dispatcher-servlet 上下文中不可见

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:49 26 4
gpt4 key购买 nike

我有一个网络应用程序,我在其中定义了基本的 dispatcher-servlet web.xml 上下文并加载了 applicationContext

我在 dispatcher-servlet 中定义了 messageSource 并将其注入(inject)到 Controller 中。

我还在 applicationContext 中定义了我的服务,我可以将它们注入(inject)我的 Controller (在 dispatcher-servlet 上下文中定义)。

但是,当我将 messageSource 的定义移动到 applicationContext 以便某些服务可以解析消息时,dispatcher-servlet 上下文显示它是找不到 messageSource bean 并使用默认值,因此 Controller 注入(inject)了错误的 bean。

知道为什么 applicationContext 中的 messageSource 定义对 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 bean 必须 在要使用它的上下文中定义。它不会从父上下文“继承”到子上下文。

这有点像 Spring 1.x 的早期版本,此后从未真正改变过。

有许多“魔 bean ”必须直接驻留在 servlet appcontext 中,这就是其中之一。

关于java - 将 messageSource 移动到 applicationContext 会导致默认 messageSource 在 dispatcher-servlet 上下文中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5166244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com