大多数服务器端 J2EE 应用程序中有六种常用的范围类型:
# m6 r" R- k8 W! }- X' Z Transaction(事务)
/ t* |* K1 ]3 X9 J Request(请求)1 Z- q' M5 g" M2 r- B
HTTP session(HTTP 会话)) ^" t8 _" K( P, u5 |0 L2 X M5 l1 v
Application(应用程序)
8 J0 S% j7 r5 I+ C9 F9 J Global(全局)
! p9 q/ _$ F* n* X None(无)
+ a0 \0 p) m3 t+ }5 i- j$ w' V 事务范围6 ]- X. f5 X9 k5 s
事务范围覆盖一个事务的整个生命周期。这个范围开始于一个事务的开始。这时会创建一个惟一的范围键。这个范围结束于提交或回滚事务时。这时,与事务范围相关联的所有对象被自动释放回它们的池。! t9 l( Z7 n/ g
请求范围
o$ B) J2 S1 t8 V% d2 P 请求范围与一个 servlet 请求的范围对应;在容器调用 servlet 来处理请求之后,请求范围立即开始。同时会创建一个惟一的范围键。在 servlet 完成处理之前请求范围结束。这时,与这个范围相关联的所有对象被自动释放回它们的池。
. [7 S4 |) Y. s, U' o: D HTTP 会话范围
4 |2 Y) i* p) \2 T HTTP 会话范围与一个 HTTP 会话的生命周期对应。它从创建一个新的 HttpSession 时开始。这时会创建一个惟一的范围键。它结束于会话被销毁或过期时。这时,与这个范围相关联的所有对象被自动释放回它们的池。, j' |* m3 ?( f, M3 W3 j
应用程序范围, k- \3 d4 k q0 i& d6 F% Z, \3 n
应用程序范围覆盖应用程序的整个生命周期。它开始于把一个应用程序部署到应用服务器时。这时会创建一个惟一的范围键。这个范围结束于应用程序停止运行或从应用服务器中删除时。这时,与这个范围相关联的所有对象被自动释放回它们的池。% ?# L9 N0 T/ j ]' V
全局范围3 K$ [4 `' z- L8 s- s9 K$ E. x
全局范围是最大的范围。采用这种范围的对象不会被释放。0 a; T% q! U+ F: i7 m8 L' o
无范围
* Z+ P- B4 }: \ 无范围用于不使用对象池的对象。采用这种范围的对象每次都通过自己的对象构造函数来创建,并由 Java 垃圾收集器释放。对象管理器根本不管理它们。 |