代码之家  ›  专栏  ›  技术社区  ›  Yishai

在应用服务器中,生产中使用google guice的正确阶段是什么?

  •  4
  • Yishai  · 技术社区  · 15 年前

    这似乎是一个奇怪的问题(显而易见的答案是生产,DUH),但是如果你阅读Java文档:

    /**
      * We want fast startup times at the expense of runtime performance and some up front error
     * checking.
     */
    DEVELOPMENT,
    
    /**
     * We want to catch errors as early as possible and take performance hits up front.
     */
    PRODUCTION
    

    假设您对应用程序服务器进行了无状态调用,则初始接收方法(或大约)会创建新的每个调用注入器。如果在一个给定的调用中不需要所有的模块绑定,那么最好使用开发阶段(这是默认的),而不是将性能提前,因为您可能永远不会接受它,“提前”和“运行时性能”之间的区别是没有意义的,因为这是一个调用。

    当然,这样做的缺点似乎是您将丢失错误检查,从而导致潜在的代码路径意外地导致问题。

    所以问题归结为上述假设是否正确?当一个注入器的给定寿命是一次调用时,您会在一组大的模块上保存性能吗?

    1 回复  |  直到 13 年前
        1
  •  4
  •   Tim Gage    13 年前

    不需要为每个请求创建注入器。这并不是Guice的真正用途——每个应用程序只需要一个注入器。注入器实际上表示应用程序的配置或连接,而不是短期状态。

    我怀疑你需要调查使用 Guice Scopes .

    GuiceServlet 为您提供 @RequestScoped 它允许您将对象的生存期限制为HTTP请求,这听起来像是您想要做的。

    如果您不在servlet中,则可以始终定义自己的 custom scope . 不是很复杂。