2011-12-12 85 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。 –