2010-10-19 137 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