jersey集成spring相对来说比较简单,需要注意的几点是:
1、引入maven依赖jersey-spring,其中包含了spring的相关依赖,如果和项目中所使用的spring版本相冲突,可以通过exclusions清除掉。
2、确保jersey资源类所在的包路径,能被spring扫描到,即spring配置中的<context:component-scan base-package="" />。
3、确保jersey资源类打上注解@Component,这样可以注入spring容器的对象实例。
4、在web.xml中配置com.sun.jersey.spi.spring.container.servlet.SpringServlet。
5、jersey集成grizzly内置容器测试,看jersey集成grizzly 。在这个项目中稍有不同,自定义了一个MyJerseyServlet,继承自SpringServlet,实现spring容器的加载,以便在jersey资源类中能依赖注入。这样就能使用内置容器测试。
jersey-spring的maven依赖,去除了spring相关依赖。具体配置,可进入上面的"项目源码参考"。
<!-- jersey-spring: 包含了jersey-servlet/jersey-server/jersey-core等,同时还包含了spring相关依赖。 --> <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-spring</artifactId> <version>1.19</version> <exclusions> <exclusion> <artifactId>spring-core</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-beans</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-context</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-web</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-aop</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency>
web.xml
<servlet> <servlet-name>jerseySpring</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jerseySpring</servlet-name> <url-pattern>/jersey/*</url-pattern> </servlet-mapping>
为方便测试,集成grizzly,grizzly默认是不加载spring配置的,无法从spring容器中依赖注入对象实例,所以做了以下扩展。
自定义MyJerseyServlet,加载spring配置。
package com.jersey.demo.web.servlet; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sun.jersey.spi.spring.container.servlet.SpringServlet; public class MyJerseyServlet extends SpringServlet { /** * */ private static final long serialVersionUID = 1L; @Override protected ConfigurableApplicationContext getDefaultContext() { return new ClassPathXmlApplicationContext("applicationContext.xml"); } }
启动、停止grizzly容器的Main类,也有相应的调整。
package com.jersey.demo; import java.io.IOException; import com.jersey.demo.web.servlet.MyJerseyServlet; import com.sun.grizzly.http.SelectorThread; import com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory; public class Main { public static final String URI = "http://localhost:8081/myapp"; public static SelectorThread startServer() throws IllegalArgumentException, IOException { // 相当于web.xml中servlet jersey的配置 return GrizzlyWebContainerFactory.create(URI, MyJerseyServlet.class, null); } public static void main(String[] args) throws IllegalArgumentException, IOException { SelectorThread selectorThread = startServer(); System.out.println("--------jersey server started!"); System.in.read(); // stop server selectorThread.stopEndpoint(); System.out.println("--------jersey server stoped!"); } }
测试类和jersey集成grizzly中的一样。
时间: 2024-08-11 05:45:21