正在阅读:在Java开源的王国中自由翱翔在Java开源的王国中自由翱翔

2005-08-30 10:04 出处: 作者:孙卫琴 责任编辑:moningfeng

  对象的生命周期

  当一个对象通过new语句创建后,它就会拥有一块固定的内存空间,如果没有任何变量引用它,它就会结束生命周期,它占用的内存空间随时可能被JVM的垃圾回收器回收。

  应用程序如何管理对象的生命周期呢?目前比较流行的做法是把对象存放在一个"范围"内。例如在JavaWeb应用中,JavaBean可以存放在request、session或application范围内。每个范围对应一个对象,例如request范围对应HttpServletRequest对象,session范围对应HttpSession对象,application范围对应ServletContext对象。

  把一个JavaBean存放在request范围内,实质上是在HttpServletRequest对象的一个集合属性中加入这个JavaBean的引用,这个集合属性也被称为HttpServletRequest对象的缓存。

  把一个JavaBean存放在request范围内,等价于以下两种说法:

  把一个JavaBean加入到HttpServletRequest对象的缓存中

  把一个JavaBean和HttpServletRequest对象关联

  当JavaBean位于request范围内,这个JavaBean的生命周期依赖于HttpServletRequest对象的生命周期,当HttpServletRequest对象结束生命周期,并且这个JavaBean也不被应用程序中的其他变量引用,那么它就会结束生命周期。

  那么HttpServletRequest对象本身的生命周期由谁管理呢?这是由JavaWeb容器(也称Servlet容器)来管理的。对于每个HTTP请求,JavaWeb容器会自动创建一个HttpServletRequest对象,当HTTP请求的响应完毕,JavaWeb容器就会结束这个对象的生命周期。

  同理,当每个HTTP会话开始,JavaWeb容器会自动创建一个HttpSession对象,当这个会话结束,JavaWeb容器就会结束这个对象的生命周期;当每个JavaWeb应用启动时,JavaWeb容器会自动创建一个ServletContext对象,当这个应用被关闭,JavaWeb容器就会结束这个对象的生命周期。

  在Hibernate中,在net.sf.hibernate.Session范围内加入一个持久化对象,实质上是在Session对象的集合属性中加入这个持久化对象的引用。以下几种说法是等价的:

  在Session范围内加入一个持久化对象

  在Session的缓存中加入一个持久化对象

  把一个持久化对象与Session关联

  值得注意的是,Hibernate的Session不仅能管理缓存中持久化对象的生命周期,还会负责按照持久化对象的状态的变化,来同步更新数据库。

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品