没有web.xml的Jetty + Jersey + Spring DI

时间:2015-06-14 17:13:04

标签: spring servlets jersey jetty jax-rs

我正在尝试使用嵌入式Jetty 9服务器和Jersey(2.18)servlet编写一个小型REST应用程序。我想使用Spring 4进行依赖注入,但我在Jersey资源中注入spring bean时遇到了麻烦。 我正在以编程方式配置服务器,因此没有web.xml。

我的泽西资源配置是:

public class ApplicationConfig extends ResourceConfig {

  public static final String ROOT_PACKAGE = "com.example";

  public ApplicationConfig() {
    packages(true, ROOT_PACKAGE);

    // Features
    register(JacksonFeature.class);

    property(METAINF_SERVICES_LOOKUP_DISABLE, true);

  }
}

主要类(我正在配置和启动Jetty)是:

public class Runner {

  public static void main(String[] args) {
    ApplicationConfig applicationConfig = new ApplicationConfig();

    ServletHolder jerseyServlet = new ServletHolder(new ServletContainer(applicationConfig));

    ServletContextHandler context = new ServletContextHandler();

    context.setContextPath("/");
    context.addServlet(jerseyServlet, "/rest/*");

    context.addEventListener(new ContextLoaderListener());
    context.addEventListener(new RequestContextListener());

    context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
    context.setInitParameter("contextConfigLocation", ProductionSpringConfig.class.getName());

    Server server = new Server(8080);
    server.setHandler(context);

    try {
      server.start();
      server.join();
    } catch (Exception e) {
      e.printStackTrace();
    }

  }
}

弹簧配置为:

@Configuration
@ComponentScan("com.example")
public class ProductionSpringConfig {}

我在扫描包中添加了一个简单的Spring组件,我可以看到它在服务器启动时被正确实例化了:

@Component
public class BeanExample {

  public void doSomething(){
    System.out.println("HelloWorld");
  }
}

当我尝试将它注入Jersey资源时,它总是为空。我尝试使用Autowired和Inject注释。 我很确定我误解了一些东西而且我没有正确配置所有部分。

有人可以帮忙吗?

0 个答案:

没有答案