请求范围的ContainerRequestFilter

时间:2014-08-20 12:44:13

标签: java spring jersey jax-rs

我有一个ContainerRequestFilter impl例如HeaderRequestFilter,我想让它为每个请求实例化。我正在使用春季和平针织物。我尝试将@Scope("request")置于HeaderRequestFilter之上,但它实例化了一次,即单身。我想维护javax.ws.rs.core.UriInfojavax.ws.rs.core.Request等州。因此,如果该类是单身人士,那么它将受到竞争条件的影响。

有人可以帮我解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:2)

来自JAX-RS specification, 6.4

  

默认情况下,就像所有其他提供程序一样,单个实例   为每个JAX-RS实例化每个过滤器或实体拦截器   应用。 (......)实施可以提供替代生命周期   超出默认选项的选项。

我不知道是否有任何实现提供不同的生命周期。

例如,你不需要害怕比赛条件通过HttpServletRequest注入@Context。该规范在第9.1章中明确指出:

  

上下文特定于特定请求但具体是某些实例   JAX-RS组件(具有生命周期的提供者和资源类)   除了每个请求)可能需要支持多个并发   要求。注入时所列类型之一的实例   9.2节,提供的实例必须能够选择   正确的特定请求的上下文。使用线程本地代理   是实现这一目标的常用方法。