【问题标题】:DispatcherServlet not injected into the controllerDispatcherServlet 未注入控制器
【发布时间】:2014-09-10 07:38:43
【问题描述】:

我正在开发一个在 Spring Boot(没有 web.xml)和 WebSphere(有 web.xml)上运行的应用程序。有一个控制器需要将 DispatcherServlet 注入其中。虽然它适用于 Spring Boot 环境,但在 WebSphere 上失败 - 找不到 DispatcherServlet 类型的 bean。

在 web.xml 中,我使用带有中间层的父上下文(上下文加载器侦听器)和几个具有独立上下文的调度程序。其中之一包含此类控制器(以及其他)。

为什么它不起作用?我的第一个假设是 Spring Boot 首先创建并注册 DispatcherServlet,然后扫描控制器,而当使用 web.xml 运行时,它以相反的顺序发生,因此控制器在 DispatcherServlet 可以从上下文访问之前被实例化。

我该如何解决这个问题?

【问题讨论】:

  • 请原谅我问,但为什么需要将 DispatcherServlet 注入控制器?
  • 用于批处理。
  • 你能详细说明一下吗?
  • 是的,但这与我的问题无关。我要问的是如何在我的控制器中获取 DispatcherServlet 的实例。
  • 我问是因为我怀疑我们正在查看一个 XY 问题meta.stackexchange.com/questions/66377/what-is-the-xy-problem

标签: java spring spring-mvc inversion-of-control


【解决方案1】:

您不能直接注入 DispatcherServlet,因为它没有在 Spring Context(例如 XmlWebApplicationContext)中注册。 但是您可以扩展 DispatcherServlet,将自身的链接存储到静态字段(在构造函数调用中)。而你这个链接在你的代码中的任何地方。

其他方式 - 如果您“手动”创建 DispatcherServlet - 您可以在 application-context.xml 中将您的 DispatcherServlet 注册为 bean。

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2019-11-18
    • 2013-11-05
    • 1970-01-01
    • 2017-10-29
    • 2017-08-12
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多