Bean Serializable
Interface 的接口让
Bean可以串行化,将其变成一个可保存为以后使用的二进制流。当一个
Bean被系列化到磁盘上或者其他任何地方,其状态被保存起来,其中的属性值也不会改变。在
Bean的规范中,JSP并没有要求
Bean实现Serializable接口。但是,如果您希望自己控制您所创建的组件的serialization进程,或者您想serialize并不是标准组件扩展的组件,您必须了解serialization and deserialization的细节。
有几个原因你会把
Bean冷藏起来以备后用。有些服务器通过将所有的SESSION 数据(包括
Bean)写入磁盘来支持任意长的SESSION生命期,即使服务器停机也不会丢失。当服务器重新启动后,串行化的数据被恢复。同样的理由,在重负载的站点上支持服务器分簇的环境中,许多服务器通过串行化来复制SESSION。如果你的
Bean不支持串行化,服务器就不能正确地保存和传输类。
通过同样的策略,你可以选择将
Bean保存在磁盘上或者数据库中,以备后用。例如,也许可以将客户的购物车实现为一个
Bean,在访问期间将其保存在数据库中。
如果
Bean需要特殊的复杂的初始设置,可以将
Bean设置好后串行化保存在磁盘上。这个
Bean的“快照”可以用在任何需要的地方,包括在$#@60;jsp:use
Bean$#@62;中用
BeanName属性的调用。
$#@60;jsp:use
Bean$#@62;标签中的
BeanName属性,用来实例化一个串行化的
Bean,而不是用来从一个类创建一个全新的实例。如果
Bean还没有创建,
BeanName属性传给java.
Beans.
Bean.instantiate()方法,由类装载器对类进行实例化。它首先假定存在一个串行化的
Bean(带有扩展名.ser),然后会将其激活。如果这个操作失败,它就会实例化一个新的实例。