2010-11-08 19 views
7

estoy teniendo el siguiente código:¿Cómo inyectar dependencias a los recursos con Jersey?

@Path("stores") 
class StoreResources { 

    private ServerConfig config; 

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

y necesito el objeto ServerConfig para ser inyectado en esta clase desde fuera y utilizarlo dentro del método getAll().

¿Cuáles son las posibles maneras de lograrlo? ¿Debería usar un marco DI como Guice o Spring?

Respuesta

5

Este es un buen blog sobre la inyección de primavera bajo Jersey http://javaswamy.blogspot.com/2010/01/making-jersey-work-with-spring.html

El resultado es que utilice anotaciones a los campos de marcas que se van a inyectar, un recurso ejemplo de ello es

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

Para mis propósitos de la configuración fue excesivamente difícil, así que utilicé una fábrica de resolver resistores estáticos para resolver el frijol. p.ej.

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

No necesita Spring o Guice para inyectar un ServletConfig. Jersey lo hace a través de su propio mecanismo de inyección. Consulte el ejemplo de servlet simple que viene con la distribución de muestras Jersey. Aquí está el código de ejemplo que inyecta una HttpServletRequest y una ServletConfig en un recurso:

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

} 

Al implementar una aplicación JAX-RS utilizando Servlets entonces ServletConfig, ServletContext, HttpServletRequest y HttpServletResponse están disponibles para el uso de la inyección @Context.

+5

No es un 'ServletConfig', es un' ServerConfig', que es probablemente un objeto personalizado que desea inyectar. – GuiSim

Cuestiones relacionadas