Web services JAX-RS:GetClass与GetSingleton

Web services JAX-RS:GetClass与GetSingleton,web-services,web-applications,jersey,jax-rs,Web Services,Web Applications,Jersey,Jax Rs,我正在使用JAX-RS(Jersey实现)构建一个web服务 web应用程序的入口点是一个类,它扩展了application并重写了getClasses方法。我知道JAX-RS将为每个新请求创建一个新实例 可以重写getSingleton。我的理解是,这将对所有请求重用相同的实例。但是,这种方法(假设我是正确的)不会破坏web应用程序中的并发性吗?也就是说,由于始终使用同一实例,传入的请求将一次处理一个(FIFO?)。不,不会。JVM中的多个线程能够同时访问一个类的一个实例(在本例中,调用资源上

我正在使用JAX-RS(Jersey实现)构建一个web服务

web应用程序的入口点是一个类,它扩展了
application
并重写了
getClasses
方法。我知道JAX-RS将为每个新请求创建一个新实例


可以重写
getSingleton
。我的理解是,这将对所有请求重用相同的实例。但是,这种方法(假设我是正确的)不会破坏web应用程序中的并发性吗?也就是说,由于始终使用同一实例,传入的请求将一次处理一个(FIFO?)。

不,不会。JVM中的多个线程能够同时访问一个类的一个实例(在本例中,调用资源上的资源方法)。您只需要确保您的资源是线程安全的

为了说明
getClasses()
getSingletons()
之间的区别,让我们假设我们有一个
HelloWorldResource
类似:

@Path("helloworld")
public class HelloWorldResource {

    private volatile int counter = 0;

    @GET
    @Produces("text/plain")
    public String getHello() {
        return "Hello World! " + counter++;
    }

}
多次调用
getHello
resource方法将返回:

  • 如果您通过
    getClasses

    Hello World! 0
    Hello World! 0
    Hello World! 0
    ...
    
  • 如果您使用
    getsingleton
    注册资源

    Hello World! 0
    Hello World! 1
    Hello World! 2
    ...
    

我对这些方法的签名还有一个疑问。一个是返回集,另一个是设置“getSingleton()方法返回您在应用程序类的实现中自己创建的实际实例。当您希望控制资源类和提供程序的实例创建时,可以使用此方法。例如,您可能正在使用Spring实例化JAX-RS对象,或者您希望注册使用JAX-RS的EJB注释。”-来源: