我有以下代码:
@Path("stores")
class StoreResources {
private ServerConfig config;
@GET
public String getAll() {
//do some stuff with ServerConfig
}
}
我需要从外部将ServerConfig
对象注入此类,并在getAll()
方法中使用它。
实现它的可能方法是什么?我应该使用像Guice或Spring这样的DI框架吗?
答案 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。