如何将Spring applicationContext加载到Jersey应用程序中

时间:2015-08-04 21:46:35

标签: spring web-services rest jersey

我正在使用以下内容创建Jersey JAX-RS Web服务:

package com.mycompany.rest.config;

import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;


@ApplicationPath("")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        return getRestResourceClasses();
    }

    private Set<Class<?>> getRestResourceClasses() {
        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        resources.add(com.mycompany.rest.controllers.UserController.class);
        return resources;
    }
}

但是,当我尝试集成spring applicationContext时,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.mycompany.rest.user"/>


    <bean id="userService" class="com.mycompany.rest.user.UserServiceImpl" />

</beans>

我从我的控制器类获取由上面粘贴的bean加载的userService的空指针。我假设这是因为应用程序上下文没有加载到Jersey应用程序中。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

如果要将Spring bean注入Jersey资源类,则需要在类路径中添加jersey-spring3依赖项。见https://jersey.java.net/documentation/latest/spring.html

可以在https://github.com/jersey/jersey/tree/2.19/examples/helloworld-spring-webapp

找到一个hello-world示例

答案 1 :(得分:1)

我遇到了同样的问题,我通过在服务中添加@autowired并扩展SpringBeanAutowiringSupport来解决此问题,如下所示:

@Path("/mails")
public class MailController extends SpringBeanAutowiringSupport{
@Autowired
private MailService mailService;

@GET
@Path("/{code}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public String getMails(@PathParam("code") String code) throws Exception {
    //function logic
}

请注意,这无需集成jersey-springx.jar就可以正常工作 而且我正在使用Spring 3和jersey-bundle-1.19.1.jar