java - 如何将 spring bean 注入(inject) jersey 的资源类中?

标签 java spring jersey

首先我定义了一个 Jersey 资源,它定义了一个类 GetAllProgramDesc,然后向其中注入(inject)一个 java beans“IDataDevProgram”。

   @Path("/datadev")
   public class GetAllProgramDesc {


private IDataDevProgram dataProgram;

public IDataDevProgram getDataProgram() {
    return dataProgram;
}

public void setDataProgram(IDataDevProgram dataProgram) {
    this.dataProgram = dataProgram;
}


// The Java method will produce content identified by the MIME Media
// type "text/plain"
@GET @Path("/mbpprograms") 
@Produces("application/json")
public String getClichedMessage() {
    // Return some cliched textual content
    List<MbpProgram> list=dataProgram.showMbpProgramList(21294551);
    return JSONObject.toJSONString(list);
}   

}

然后我想将 java beans 注入(inject)球​​衣资源类:

<bean id="dataDevProgram" class="com.taobao.gemstone.data.mbpapi.datadev.DataDevProgram">
    <property name="mDBops" ref="dataDevDBOps" />
    <property name="sqlManager" ref="sqlManger" />
    <property name="actionManager" ref="actionManger" />
    <property name="dataManager" ref="dataManageImpl" />
    <property name="constant" ref="constantproperty"/>
</bean>

<bean id="datadevrest"    class="com.taobao.gemstone.data.mbpapi.restresources.GetAllProgramDesc">
    <property name="dataProgram" ref="dataDevProgram" />
</bean>

但是,当我向此网址发送查询时,整个过程崩溃了,如下所示:

java.lang.NullPointerException com.taobao.gemstone.data.mbpapi.restresources.GetAllProgramDesc.getClichedMessage(GetAllProgramDesc.java:48) sun.reflect.NativeMethodAccessorImpl.invoke0( native 方法) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:601)

有什么方法可以解决这个问题吗?

最佳答案

如果您想在 Jersey 中使用 Spring,您可以使用以下选项之一:

@Context ServletContext context;注入(inject)到您的资源类中,

然后使用如下代码:

WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context); IDataDevProgram dataProgram = applicationContext.getBean(IDataDevProgram .class);

或者,您也可以使用 IoC 容器的 Jersey 支持:

@InjectParam IDataDevProgram dataProgram

您必须使用jersey-spring contrib并在web.xml中应用SpringServlet,有许多简短的教程解释了如何做到这一点

关于java - 如何将 spring bean 注入(inject) jersey 的资源类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15985973/

相关文章:

java.lang.NoSuchMethodError : org. glassfish.jersey.server.ApplicationHandler.<初始化>

java - 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

operating-system - Java 可移植性不同 OS/JDK

java - 实体、服务类和命令对象的最佳实践问题

tomcat - javax.naming.NameNotFoundException : Name > [com] is not bound in this Context. 无法找到 [com]

java - 使用 REST webservice 上传文件是个好主意吗?

java - 如何使用java提取字符串正则表达式?

java - 基本类和驱动程序 [Java].. T.T i'm stack

java - 推土机+ Spring : MappingException: Dozer Bean Mapper is already initialized

java - 无法实例化bean