rest入门实践之五:(转载)

 

jax-rs(Java API for RESTful Web Services) 实践教程 之五 —— 注入全局变量 和 rest的生命周期

分类: javaEE SOA JAX-RS 627人阅读 评论(4) 收藏 举报

转载处 

http://blog.csdn.net/exsuns

 

 

 

新建web工程,加入jax-rs的JAR包

 

新建一个类

 

在全局变量上使用@QueryParam和DefaultValue注解,jax-rs可以自动注入值

 

 

 
  1. @Path("UserContext")  
  2. public class UserContext {  
  3.     int i = 0;  
  4.       
  5.     @QueryParam("org"@DefaultValue("默认组织"//注入参数  
  6.     String org;  
  7.       
  8.     @GET  
  9.     public String hi(@QueryParam("name") String yourName ){  
  10.         System.out.println(++i);  
  11.         System.out.println(org);  
  12.         return org;  
  13.     }  
  14. }  

 

 

 

 

 

[xhtml] view plaincopy
  1. <!--web.xml中加入-->  
  2.   <servlet>  
  3.     <display-name>JAX-RS REST Servlet</display-name>  
  4.     <servlet-name>JAX-RS REST Servlet</servlet-name>  
  5.     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
  6.     <load-on-startup>1</load-on-startup>  
  7.   </servlet>  
  8.   <servlet-mapping>  
  9.     <servlet-name>JAX-RS REST Servlet</servlet-name>  
  10.     <url-pattern>/services/*</url-pattern>  
  11.   </servlet-mapping>  

 

 

部署并运行

http://localhost:8080/rest/services/UserContext?org=TestORG

会打印出全局变量,同时也会打印出i的值,i为1

再运行一次

http://localhost:8080/rest/services/UserContext?org=TestORG

i的值还是1

 

 

验证了第一句结论:

 

所以默认情况下 rest服务的生命周期 == request的生命周期,请求过后立即消毁,所以默认情况下rest服务类是线程安全的

 

 

如果你需要使用单例来发布,jax-rs提供了注解@Singleton

  1. @Singleton  
  2. public class UserContext {  

 

加入Singleton注解以后,再重启运行

i的值就会不停累加

所以这时rest服务的生命周期 == 应用服务器生命周期

 

 

 

另外还有一种生命周期就是@PerSession,每一个session请求,就产生一个rest资源实例,直到这个session消毁,这个rest资源才会消失。

 

  1. @PerSession  
  2. public class UserContext {  
 

 

 

 

 

所以

rest有三种生命周期,三种周期分别等于request,session,applcation的生命周期

posted on 2012-06-30 11:40  pony1223  阅读(210)  评论(0编辑  收藏  举报

导航