RESTful Web服务生命周期*始终*每个请求?

时间:2014-04-24 15:12:01

标签: java web-services glassfish jersey jax-rs

Beginning Java EE 7 by Antonio Goncalves中写道:

编写RESTful Web服务 - >部分中;生命周期和回调

  

因此,RESTful Web服务的生命周期是按请求进行的,因此服务不必担心   并发,可以安全地使用实例变量。

后来他写了几行:

  

请记住,RESTful Web服务也可以使用@Stateless或@Singleton来注释   受益于会话bean的服务。

那是什么?每个请求的生命周期,还是会话?

除此之外,如果生命周期是会话,那么在将@Context注入属性时,它如何处理HttpHeaders注释?标题在会话期间可能会有所不同,因此在每次请求后该属性是否始终更新?

1 个答案:

答案 0 :(得分:4)

根据JAX-RS规范,每个实现(如Jersey)都必须支持每个请求的行为:

  

3.1.1生命周期与环境

     

默认情况下,会为每个请求创建一个新的资源类实例   到那个资源。首先调用构造函数(参见第3.1.2节),   然后注入任何请求的依赖项(参见第3.2节)   调用适当的方法(参见第3.3节),最后调用   对象可用于垃圾回收。

     

实现可以提供其他资源类生命周期,用于指定这些生命周期的机制   超出了本规范的范围。例如。一个实现   基于控制反转框架可以支持所有的   该框架提供的生命周期选项。

这意味着如果您的Resource类没有另外注释,则它是按请求的。一个众所周知的例外是Spring bean:如果你的Rest资源也是一个Spring Bean,那么Spring指定该类的生命周期。关于EJB(@Singleton)的相同内容