2010-11-08 14 views
7

Sto avendo il codice seguente:Come iniettare dipendenze in risorse con Jersey?

@Path("stores") 
class StoreResources { 

    private ServerConfig config; 

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

E ho bisogno dell'oggetto ServerConfig da iniettare questa classe dall'esterno e usarlo all'interno del metodo getAll().

Quali sono i modi possibili per raggiungerlo? Dovrei usare un framework DI come Guice o Spring?

risposta

5

Questo è un buon blog su iniezione di primavera sotto Jersey http://javaswamy.blogspot.com/2010/01/making-jersey-work-with-spring.html

Il risultato è che si utilizza annotazioni a campi flag che devono essere iniettato, una risorsa esempio è

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(); 
    } 
} 

Per i miei scopi della configurazione era eccessivamente difficile quindi ho usato una fabbrica di resolver a molla statica per risolvere il problema. per esempio.

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

Non è necessario Spring o Guice per iniettare un ServletConfig. Jersey fa attraverso il proprio meccanismo di iniezione. Fare riferimento all'esempio di servlet semplice fornito con la distribuzione dei campioni Jersey. Ecco il codice di esempio che inietta una HttpServletRequest e ServletConfig su una risorsa:

@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() + 
       "'"; 
    } 

} 

Quando si distribuisce un'applicazione JAX-RS utilizzando Servlet poi ServletConfig, ServletContext, HttpServletRequest e HttpServletResponse sono disponibili per iniezione utilizzando @Context.

+5

Non è un 'ServletConfig', è un' ServerConfig', che probabilmente è un oggetto personalizzato che vuole essere iniettato. – GuiSim

Problemi correlati