如何使用Jersey将依赖项注入资源?

时间:2010-11-08 10:29:47

标签: rest dependency-injection jersey jax-rs

我有以下代码:

@Path("stores")
class StoreResources {

  private ServerConfig config;

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

我需要从外部将ServerConfig对象注入此类,并在getAll()方法中使用它。

实现它的可能方法是什么?我应该使用像Guice或Spring这样的DI框架吗?

2 个答案:

答案 0 :(得分:5)

这是一篇关于Jersey 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();  
   }  
} 

出于我的目的,配置过于困难所以我使用静态弹簧解析器工厂来解析bean。例如

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

答案 1 :(得分:2)

您不需要Spring或Guice来注入ServletConfig。泽西岛通过自己的注射机制。请参阅Jersey样本分发附带的simple-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部署JAX-RS应用程序时,可以使用@Context注入ServletConfig,ServletContext,HttpServletRequest和HttpServletResponse。