2010-11-08 112 views
7

我有下面的代碼:如何將依賴關係注入澤西島的資源?

@Path("stores") 
class StoreResources { 

    private ServerConfig config; 

    @GET 
    public String getAll() { 
    //do some stuff with ServerConfig 
    } 
} 

我需要ServerConfig對象被注入到這個類從外部使用它getAll()方法內。

實現它的可能方法有哪些?我應該使用像Guice還是Spring這樣的DI框架?

回答

5

這是澤西http://javaswamy.blogspot.com/2010/01/making-jersey-work-with-spring.html

其結果是我們使用註解是標誌字段下關於Spring注入一個好的博客被注入,一個例子資源是

package com.km.services; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 
import com.sun.jersey.spi.inject.Inject; 
import com.km.spring.SimpleBean; 

@Path("/hello") 
@Component 
@Scope("request") 
public class HelloResource { 

    @Inject private SimpleBean simpleBean; 

    @GET 
    @Produces("text/plain") 
    public String getMessage() { 
    return simpleBean.sayHello(); 
    } 
} 

對於我而言配置過於困難,所以我使用了一個靜態的解析器工廠來解決這個問題。例如。

private SimpleBean simpleBean = SpringBeanFactory.getBean("mySimpleBean"); 
2

你不需要Spring或Guice來注入一個ServletConfig。澤西島通過自己的注射機制。請參閱Jersey樣本分發附帶的簡單servlet示例。下面是注入一個HttpServletRequest和一個的ServletConfig到資源的示例代碼:

@Path("/resource1") 
public class ResourceBean1 { 

    @Context 
    HttpServletRequest servletRequest; 

    @Context 
    ServletConfig servletConfig; 

    @GET 
    @Produces("text/plain") 
    public String describe() { 
     return "Hello World from resource 1 in servlet: '" + 
       servletConfig.getServletName() + 
       "', path: '" + 
       servletRequest.getServletPath() + 
       "'"; 
    } 

} 

當部署使用的Servlet然後的ServletConfig,ServletContext中,HttpServletRequest和HttpServletResponse的一個JAX-RS應用適用於使用@Context注射。

+5

它不是'ServletConfig',它是一個'ServerConfig',它可能是一個他想要注入的自定義對象。 – GuiSim 2013-08-08 12:27:51