2012-06-13 58 views
2

我試圖使用注入澤西注入@Context參數和Guice注入參數建設注入。混合Guice構造函數注入和Jersey @Context

此作品(純澤西注射):

@Path("top") 
public class TopLevel 
{ 
    public TopLevel(@Context ResourceContext context) 
    { 
    .. 
    } 
} 

此作品(純吉斯注射):

@Path("top") 
public class TopLevel 
{ 
    @Inject 
    public TopLevel(MyService service) 
    { 
    .. 
    } 
} 

但這工作:

@Path("top") 
public class TopLevel 
{ 
    @Inject 
    public TopLevel(MyService service, @Context ResourceContext context) 
    { 
    .. 
    } 
} 
因爲Guice,所以

不知道如何注入ResourceContext。如果你看一下JerseyServletModule你會發現它注入了以下類:

WebApplication, Providers, FeaturesAndProperties, MessageBodyWorkers, ExceptionMapperContext, HttpContext, UriInfo, ExtendedUriInfo, HttpRequestContext, HttpHeaders, Request, SecurityContext and HttpResponseContext 

但不ResourceContext。有任何想法嗎?

UPDATE:我不認爲我可以使用字段注入,因爲我需要ResourceContext來實例化另一個實例字段。例如:

public class Foo 
{ 
    public Foo(ResourceContext context) {} 
} 

public class Bar 
{ 
    private final MyService service; 
    private final ResourceContext context; 
    private final Foo foo; 

    @Inject 
    public Bar(MyService service, @Context ResourceContext context) 
    { 
    this.foo = new Foo(context); 
    } 
} 

如果我是構造後實例ResourceContext,我不能實例Foo

回答

0

您應該可以使用@Context將它注入到實例字段中。如果這不能解決您的問題(即您確實需要在構造函數中訪問它),則可以在http://java.net/jira/browse/JERSEY上提交增強請求,我們將它添加到JerseyServletModule中。這個變化很小。

+0

我不認爲我可以注入一個實例字段(我已經更新了問題來解釋爲什麼)。我已經提交了http://java.net/jira/browse/JERSEY-1219 – Gili

+0

謝謝。固定在1.13-SNAPSHOT。 –