在Beginning Java EE 7 by Antonio Goncalves中写道:
在编写RESTful Web服务 - >部分中;生命周期和回调:
因此,RESTful Web服务的生命周期是按请求进行的,因此服务不必担心 并发,可以安全地使用实例变量。
后来他写了几行:
请记住,RESTful Web服务也可以使用@Stateless或@Singleton来注释 受益于会话bean的服务。
那是什么?每个请求的生命周期,还是会话?
除此之外,如果生命周期是会话,那么在将@Context
注入属性时,它如何处理HttpHeaders
注释?标题在会话期间可能会有所不同,因此在每次请求后该属性是否始终更新?
答案 0 :(得分:4)
根据JAX-RS规范,每个实现(如Jersey)都必须支持每个请求的行为:
3.1.1生命周期与环境
默认情况下,会为每个请求创建一个新的资源类实例 到那个资源。首先调用构造函数(参见第3.1.2节), 然后注入任何请求的依赖项(参见第3.2节) 调用适当的方法(参见第3.3节),最后调用 对象可用于垃圾回收。
实现可以提供其他资源类生命周期,用于指定这些生命周期的机制 超出了本规范的范围。例如。一个实现 基于控制反转框架可以支持所有的 该框架提供的生命周期选项。
这意味着如果您的Resource类没有另外注释,则它是按请求的。一个众所周知的例外是Spring bean:如果你的Rest资源也是一个Spring Bean,那么Spring指定该类的生命周期。关于EJB(@Singleton)的相同内容