上一节中,我们已经知道了如何用@Inject实现基本注入,这一节研究Bean实例注入后的“生命周期”,web application中有几种基本的生命周期(不管哪种编程语言都类似)

1、Application 生命周期

即:web application启动后,处于该生命周期级别的对象/变量,将一直存在,可以被所有web应用的用户共同访问,通常用来做网站计数器,实现流量访问之类。直到web 应用停止或重新启动,该对象才被销毁。简单来说:只要web application处于激活状态,不论你换什么浏览器,不论你是否关闭页面,这个对象都会一直存在。

2、Session 生命周期

每次我们在某种类型的浏览器(比如:IE或Firefox)里,请求web application的某个页面时,就会生成Session,只要浏览器不关闭,Session就能持续有效(哪怕你把当前Tab标签页面给关掉,或者在当前url地址栏,输入一个其它不相关的网址,跳到其它网站,然后再回过来访问web app,只要Session不超时,Session仍有效)。说得更白一点:按F5刷新,该对象/变量不会被自动销毁,除非Session过期。

注:Session是跟浏览器有关的,如果在FireFox里打开web Application的某个url,再到IE里打开同样的url,这二个浏览器里的Session是不同的。

3、Request 生命周期

即:只有本次http请求才有效,通俗点讲,如果你定义一个变量的生命周期是Request级别,刷新一次页面后,该变量就被初始化(重新投胎)了。

为了演示上面的几种情况,我们创建一个新的Dynamic Website,仍然用Maven来管理,项目结构如下:

JAVA CDI 学习(2) - Scope 生命周期

model包下,创建了几个类,先来看基类BaseItem

 1 package model;
 2 
 3 import java.io.Serializable;
 4 
 5 public class BaseItem implements Serializable {
 6 
 7     private static final long serialVersionUID = -8431052435964580554L;
 8 
 9     private long counter;
10 
11     public void addCounter() {
12         counter++;
13 
14     }
15 
16     public long getCounter() {
17         return counter;
18     }
19 
20     public long getHashCode() {
21         return hashCode();
22     }
23 
24 }
BaseItem

相关文章:

  • 2021-07-16
  • 2021-09-26
  • 2022-01-20
  • 2021-10-13
  • 2021-11-24
  • 2022-02-23
  • 2021-12-04
猜你喜欢
  • 2022-12-23
  • 2021-11-21
  • 2021-08-26
  • 2021-12-18
  • 2021-10-07
  • 2021-12-12
  • 2021-08-23
相关资源
相似解决方案