手动将Spring上下文注入Jersey服务器

时间:2015-04-10 20:45:05

标签: java spring maven jersey

我想使用Jersey和Spring。我正在开发独立应用程序(不是部署到某个Web服务器,而是作为控制台应用程序运行)。所以我做了这样的事情:

public static void main(String[] args) throws IOException {
    ResourceConfig rc = new PackagesResourceConfig(MAIN_PACKEAGE);
    HttpServerFactory.create(BASE_URI, rc).start();
}

效果很好,但接下来我尝试将Jersey Resources与Spring集成。正如我所提到的here我应该将 jersey-spring3 添加到classpath中,所以我在pom.xml中添加一个依赖项:

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.17</version>
</dependency>

但它实际上并不起作用:它甚至没有初始化Spring上下文(引用日志)。我试图手动初始化SC:

new ClassPathXmlApplicationContext(PATH_TO_APP_CONTEXT);

这个工作,但是分开:上下文正在初始化,但依赖注入不起作用 - 我不能将一些bean自动装配到Jersey Resource(也标记为Spring Component)。

更新

我发现 jersey-spring3 与Grizzly服务器配合得很好。所以工作代码示例是:

public static void main(String[] args) throws IOException {
    ResourceConfig rc = new ResourceConfig().packages(MAIN_PACKAGE);
    GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
}

但我仍然想知道如果使用HttpServerFactory.create(BASE_URI, rc) ...

创建服务器,为什么与Spring集成不起作用

1 个答案:

答案 0 :(得分:0)

不确定为什么Grizzly服务器正在运行,但尝试添加

rc.property( "contextConfig", applicationContext );

rc.property( "contextConfigLocation", "path/to/context.xml" );

取决于初始化spring上下文的方式(以编程方式vs xml)。否则,如果你的xml上下文被命名为applicationContext.xml,我希望它“正常工作”。

有关详细信息,请参阅SpringComponentProvider来源。这是负责用Jersey桥接Spring的班级。