Web services JAX-RS:GetClass与GetSingleton
我正在使用JAX-RS(Jersey实现)构建一个web服务 web应用程序的入口点是一个类,它扩展了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中的多个线程能够同时访问一个类的一个实例(在本例中,调用资源上
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 ...