在应用服务器的生产中使用 Google Guice 的正确阶段是什么?

Yis*_*hai 5 java performance guice

这似乎是一个奇怪的问题(显而易见的答案是 Production,废话),但是如果您阅读 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
Run Code Online (Sandbox Code Playgroud)

假设您对应用程序服务器进行无状态调用,初始接收方法(或其他方法)会在每次调用时创建新的注入器。如果在给定的调用中不需要所有模块绑定,那么使用 Development 阶段(这是默认值)而不是预先考虑性能似乎会更好,因为您可能永远不会接受它,这里“前期”和“运行时性能”之间的区别有点没有实际意义,因为它是一个调用。

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

所以问题归结为上述假设是否正确?当注入器的给定生命周期是一次调用时,您会在大量模块上节省性能吗?

Tim*_*age 4

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

我怀疑你需要考虑使用Guice Scopes

GuiceServlet为您提供了@RequestScoped允许您将对象的生命周期限制为 HTTP 请求的功能,这听起来像您想要做的。

如果您不在 Servlet 中,您始终可以定义自己的自定义范围。这不是很复杂。