【问题标题】:Singleton with jetty webapps带有码头 webapps 的单身人士
【发布时间】:2015-07-16 18:07:37
【问题描述】:

我想将 12mb 的对象注入我的 jetty webapp。我将我的应用程序部署为 WAR 文件,因此我无法添加 guice 注入器,因为它显示在其他问题中。

怎么做?我想我需要使用 applicationContext.xml

【问题讨论】:

  • 看起来您已经在使用 spring,您可以在其中创建单例对象并提供对象注入。你真正的问题是什么?
  • 我是Java生态系统的新手,我知道jetty使用spring,我不知道它是如何工作的。您能给我有关春季单身人士的链接吗?
  • Jetty 不使用 Spring。事实上,它通常是反过来设置的,Spring 被设置为初始化和启动 Jetty。
  • Jetty 不使用弹簧。如果您已将其配置为使用 Spring,则您的应用程序可能会使用它。请添加您认为与我们相关的所有信息,以了解您的项目目前的运作方式,以便我们能够提供更多帮助。
  • (+1) 到 “请添加您认为与我们相关的所有信息,以了解您的项目当前如何运作”

标签: java jersey jetty maven-jetty-plugin


【解决方案1】:

使用ServletContext.setAttribute(String,Object) 来存储您的对象。

然后使用 ServletContext.getAttribute(String) 从您的 Servlet 和过滤器访问该单例。

确保您的对象可以安全地从多个线程中使用!

【讨论】:

  • 这种方法的缺点:您应该在应用程序启动时注入对象,并且只能通过请求/响应周期来恢复对象。这意味着您无法在服务器中完成的 asycn 操作中获取此 singleton,例如cron 每 X 分钟触发一次。此外,由于 OP 发布了他/她使用 applicationContext.xml 的帖子,因此应用程序可能使用 Spring,而 OP 不知道如何利用该框架的好处(?)。
  • 如果你正在使用 Jetty,并且你在 webapp 中触发了一些东西,任何东西,你可以通过普通的 servlet 方式访问 ServletContext,或者通过 Jetty WebAppContext,或者通过 Jetty ServletContextHandler,或通过 Jetty Server 对象。
  • Cron 或任何其他异步操作不需要知道任何这些对象。应用程序中的任何模型类都不应该。
  • ServletContext 在 Jetty 中的实现是特定于 Jetty 的 ServletContextHandler,每个 webapp 存在 1 个且只有 1 个。 Web 应用程序中的任何东西都可以访问此信息,无论是通过 http 请求、人工本地连接器请求、匿名请求调度程序、jmx 调用、通过调度程序的定时事件、服务器 bean 调用、lib 回调、jms 队列等(列表可能的方法是无穷无尽的)。简而言之,该 web 应用程序中的任何代码都可以访问该单例,无论是否有请求,以及我们没有像 Spring/Guice/CDI 等的 IoC 框架。
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
相关资源
最近更新 更多