2010-10-19 112 views
3

下面的類(我的實現UserDetailsService)與會話綁定,會話被序列化(在谷歌應用程序引擎中)。Spring:序列化引用了不可序列化bean的對象

最近我觀看了Spring 3演示文稿,其中說如下所示的bean(如userDao)由不會序列化bean的代理加載,但只存儲名稱並重新獲取有關反序列化的參考。

但與下面的代碼我得到一個NotSerializableException: com.prepayproxy.dataaccesslayer.GAEUserDao

@Service("springUserDetailsService") 
public class SpringUserDetailsService implements UserDetailsService, Serializable { 
    @Resource(name="userDao") 
    private IUserDao userDao; 
    //... 
} 

回答

2

你有2種選擇:

  1. 標記DAO爲瞬態所以它不序列。
  2. 自己序列化dao。

Java提供了一種序列化不可序列化對象的方法。您將需要實現

 

private void writeObject(java.io.ObjectOutputStream out) 
    throws IOException 
private void readObject(java.io.ObjectInputStream in) 
    throws IOException, ClassNotFoundException; 
 

可序列化接口包含這些方法的寫入。這裏是一個鏈接到文檔(java 1.6)Serializable