Как внедрить зависимости в ресурсы с помощью Джерси?

У меня есть следующий код:

@Path("stores")
class StoreResources {

  private ServerConfig config;

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

И мне нужно, чтобы объект ServerConfig внедрился в этот класс извне и использовал его внутри метода getAll().

Каковы возможные пути ее достижения? Должен ли я использовать DI-фреймворк, такой как Guice или Spring?


person Dunith Dhanushka    schedule 08.11.2010    source источник


Ответы (2)


Это хороший блог о внедрении Spring в Джерси http://javaswamy.blogspot.com/2010/01/making-jersey-work-with-spring.html

В результате вы используете аннотации для пометки полей, которые должны быть введены, например, ресурс

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");
person Eldorado    schedule 09.11.2010

Вам не нужны Spring или Guice для внедрения ServletConfig. Джерси делает это через собственный механизм впрыска. Обратитесь к примеру с простым сервлетом, который поставляется с дистрибутивом примеров из Джерси. Вот пример кода, который внедряет 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() +
                "'";
    }

}

При развертывании приложения JAX-RS с использованием Servlet ServletConfig, ServletContext, HttpServletRequest и HttpServletResponse доступны для внедрения с использованием @Context.

person Arul Dhesiaseelan    schedule 12.06.2011
comment
Это не ServletConfig, это ServerConfig, который, вероятно, является пользовательским объектом, который он хочет внедрить. - person GuiSim; 08.08.2013