2010-11-08 3 views
7

Je vais avoir le code suivant:Comment injecter des dépendances dans les ressources avec Jersey?

@Path("stores") 
class StoreResources { 

    private ServerConfig config; 

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

Et je dois l'objet ServerConfig à injecter dans cette classe à l'extérieur et de l'utiliser dans la méthode getAll().

Quels sont les moyens possibles pour y parvenir? Dois-je utiliser un cadre DI comme Guice ou Spring?

Répondre

5

Ceci est un bon blog sur l'injection de printemps sous Jersey http://javaswamy.blogspot.com/2010/01/making-jersey-work-with-spring.html

Le résultat vous est d'utiliser des annotations aux champs de drapeau qui doivent être injectés, une ressource exemple étant

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

Pour mes fins de la configuration était excessivement difficile donc j'ai utilisé une usine de résolveur statique de ressort pour résoudre le haricot. par exemple.

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

Vous n'avez pas besoin de Spring ou de Guice pour injecter un ServletConfig. Jersey fait à travers son propre mécanisme d'injection. Reportez-vous à l'exemple de servlet simple fourni avec la distribution d'échantillons de Jersey. Voici l'exemple de code qui injecte un HttpServletRequest et un ServletConfig sur une ressource:

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

} 

Lors du déploiement d'une application JAX-RS à l'aide Servlet puis ServletConfig, ServletContext, HttpServletRequest et HttpServletResponse sont disponibles pour injection à l'aide @Context.

+5

Ce n'est pas un 'ServletConfig', c'est un' ServerConfig', qui est probablement un objet personnalisé qu'il veut injecter. – GuiSim

Questions connexes