0

我将 spring 与另一个框架一起使用,而且我是序列化的新手。

什么问题:

我需要序列化包含 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();
   }
}

什么问题:

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

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

4

2 回答 2

1

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

于 2013-08-27T07:56:47.623 回答
1
class MyClass {
 private transient ClassPathXmlApplicationContext  context; //NON-Serializable!

}

于 2013-08-27T07:53:36.050 回答