Guice Singleton和Servlet

时间:2013-07-11 07:55:15

标签: java servlets singleton guice

我正在使用Guice,我有一个问题。有一个servlet是Singleton。 JVM中只有一个此类的实例,或者只有一个Session范围的实例?那么对这个类的并发访问呢?

3 个答案:

答案 0 :(得分:0)

您的servlet资源的并发访问会有任何问题。 Servlet容器将很好地处理它,它将在eaach请求中生成新线程并传递该servlet引用并且将处理请求。

最好让你使用servlet单线程来确认单个内存空间的使用,因此容器将是轻量级的。在spring中可用相同的概念,默认情况下每个bean都是单例。

答案 1 :(得分:0)

我不确定Guice,但是根据规范,除了你的Servlet实现了邪恶的SingleThreadModel之外,Container确保每个JVM中只有一个Servlet实例存在于DD 中。 。 Container将为每个request生成一个新线程,并调用service()方法。

此外,类和实例变量不是线程安全的。只有局部变量才是线程安全的。

答案 2 :(得分:0)

实际上Guice 需要 servlet才能成为单身人士:

  

注意:每个servlet(或过滤器)都必须是@Singleton。如果无法直接对类进行批注,则必须使用bind(..)。in(Singleton.class)将其绑定,并与filter()或servlet()规则分开。任何其他范围下的映射都是错误的。这是为了保持与Servlet规范的一致性。 Guice Servlet不支持已弃用的SingleThreadModel。

(来自this documentation

您有责任正确处理并发访问。