2011-12-12 88 views
3

我在Glassfish 3.1服务器上使用Jersey创建一个API,并且需要访问HttpServletRequest对象以获得某些标头,调用者的IP等。我可以将它注入到每个API方法调用,但在全局范围内执行似乎更有效。是否可以安全地在类级别注入它,如下面的代码片段,否则这会导致Glassfish出现某种并发问题?@Context HttpServletRequest范围在泽西岛

@Path("/myapi") 
@RequestScoped 
public class MyApiResource { 

    @Context private UriInfo context; 
    @Context private HttpServletRequest request; 

回答

8

这是安全的。不要使用@RequestScoped注释 - 默认情况下,JAX-RS资源是请求范围。这意味着每个请求都会创建一个新实例,因此不会出现并发问题。

+0

谢谢马丁。出于好奇,是否有将@RequestScoped注释放在冗余之外的缺点? – user256447

+1

@RequestScoped是一个CDI注释,而不是JAX-RS。它将资源转化为一个CDI bean,它为这个类增加了一些额外的约束,并且不确定它是否不会带来更多的开销。所以只是认为最好不要包含它,除非你真的打算把资源转换成CDI bean。 –