我正在尝试使用嵌入式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注释。 我很确定我误解了一些东西而且我没有正确配置所有部分。
有人可以帮忙吗?