序列化ClassPathXmlApplicationContext

时间:2013-08-27 07:46:37

标签: java spring serialization

我使用spring和另一个框架nad我是序列化的新手。

问题:

我需要序列化包含org.eclipse.jetty.websocket.api.Session会话(不可序列化)的MyClass对象。

class MyClass {
  private org.eclipse.jetty.websocket.api.Session session; //NON-Serializable!

  private void writeObject(java.io.ObjectOutputStream out) throws IOException{
    out.writeObject(session);
  }

   private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
      session = (org.eclipse.jetty.websocket.api.Session) in.readObject();
   }
}

问题:

我从here读到可以使用不可序列化的字段序列化对象。但是,org.eclipse.jetty.websocket.api.Session具有不平凡的类层次结构。

但是当我尝试这样做时,它会抛出java.io.NotSerializableException:org.eclipse.jetty.websocket.common.WebSocketSession

2 个答案:

答案 0 :(得分:1)

class MyClass {
 private transient ClassPathXmlApplicationContext  context; //NON-Serializable!

}

答案 1 :(得分:1)

我认为ClassPathXmlApplicationContext是Serializable是没有意义的,因为那时你必须将在这个上下文中创建的所有对象与上下文一起序列化。相反,您可以保存application.xml,然后从文件中读取它并从中重新创建ClassPathXmlApplicationContext。为了防止序列化上下文字段,您可以像shamimz建议的那样使其成为瞬态,或者在序列化MyClass实例之前将其置为空白