Jersey REST Server:实例化资源类

Jersey REST服务器[1]上的一个教程说明了Jersey servlet:

此servlet分析传入的HTTP请求,并选择正确的类和方法来响应此请求。 此选择基于类和方法中的注释。

当servlet“选择正确的类和方法”时,它是否每次都重新实例化该类? 或者它是否保留每个资源类的一个实例?

这似乎很重要,因为如果这些资源类具有对存储应用程序范围状态的对象的引用,则这些状态对象将与资源一起重新实例化,并且不会最终正确地存储状态数据。

[1] http://www.vogella.com/articles/REST/article.html#restjersey

除非您使用@Singleton注释类,否则Jersey将为每个请求建立每个类的新实例。

请参阅: https : //jersey.java.net/documentation/latest/jaxrs-resources.html#d0e2331

实际上根据这篇文章,默认的注释类型是从singleton变为per-request。 这意味着在每个请求使用一个实例之前,现在为每个请求创建新的类对象。 如果你想改变它,你可以使用resourceFactory注释。

 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @ResourceFactory(SingletonProvider.class) public @interface Singleton {} 

您也可以查看com.sun.jersey.spi.resource JavaDoc的链接