JAX-RS:getClasses vs getSingletons

Dan*_*iel 9 web-services web-applications jax-rs jersey

我正在使用JAX-RS(Jersey实现)来构建Web服务.

Web应用程序的入口点是一个扩展Application和覆盖该getClasses方法的类.据我所知,JAX-RS将为每个新请求创建一个新实例.

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

Mic*_*dos 16

不,它不会.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++;
    }

}
Run Code Online (Sandbox Code Playgroud)

多次调用getHello资源方法会返回:

  • "getSingletons()方法返回您在Application类的实现中自己创建的实际实例.当您想要控制资源类和提供程序的实例创建时,可以使用此方法.例如,您可能正在使用Spring来实现实例化你的JAX-RS对象,或者你想注册一个使用JAX-RS注释的EJB." - 来源:http://java.dzone.com/articles/putting-java-rest (2认同)