我想使用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)
...
答案 0 :(得分:0)
不确定为什么Grizzly服务器正在运行,但尝试添加
rc.property( "contextConfig", applicationContext );
或
rc.property( "contextConfigLocation", "path/to/context.xml" );
取决于初始化spring上下文的方式(以编程方式vs xml)。否则,如果你的xml上下文被命名为applicationContext.xml
,我希望它“正常工作”。
有关详细信息,请参阅SpringComponentProvider来源。这是负责用Jersey桥接Spring的班级。