【问题标题】:Initialize Singletons in Spring Framework 3 MVC在 Spring Framework 3 MVC 中初始化单例
【发布时间】:2012-01-11 19:07:30
【问题描述】:

我正在编写基于 Spring 3.1.0 MVC 的应用程序。问题是:我想将一些对象放在一个单例对象(当前HttpServletRequestHttpSevletResponse)中,以便在其他对象(Spring 控制器)中使用它们。但不能这样做。我试图扩展DispatcherServlet,覆盖doServicedoDispatch。还尝试实现自己的HandlerInterceptor。没有结果。

在哪里可以初始化我的单例对象? Spring Frameworks 的入口点和销毁点在哪里(例如 init()destroy() 方法或生命周期)?

【问题讨论】:

  • 嗯,很多问题。我认为您需要阅读文档。

标签: spring spring-mvc singleton


【解决方案1】:

当前的HttpServletRequestHttpServletResponse 可用作控制器方法的方法参数:

@RequestMapping("/foo")
public String foo(HttpServletRequest request) {

}

我相信你也可以在你的控制器中@Inject他们。将注入一个代理,每次引用它们时都会使用当前的代理。 (我不是 100% 确定这个)

第三种选择是使用RequestContextHolder 容器,并从那里获取所有内容。

【讨论】:

  • 是的。我知道这些方法。谢谢。但问题是我正在实现一个外观模式。也就是说,要访问我只能从 Spring 框架访问的所有数据,请放入一个对象(例如 spring 消息、获取语言环境等)。这就是为什么我想把它们放在单例中。你知道如何实现单例的初始化吗?
  • 控制器也是单例的。我不明白你到底想达到什么目的。
  • 初始化我的单例,所以我可以在控制器中访问它。
  • 因此,您希望有一个 Singleton(根据定义,它是当时 JVM 中唯一的此类对象),以在其中存储一个 HttpServletRequest。这始终取决于请求,因此如果同时向您的服务器发出多个请求,则会搞砸事情。
  • @JukkaDahlbom 这可以通过代理实现,但我仍然不明白这一切的意义:)
猜你喜欢
  • 2011-08-15
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多