根据Effective Java书籍(第3和第77项),如果单个类implements Serializable
接口,它将不再是单例,除非它覆盖readResolve()
方法:
如第3项所述,如果在其声明中添加了“implements Serializable”字样,那么这个类[singleton Elvis类形成本书]将不再是单例。 ......
readResolve功能允许您将另一个实例替换为readObject ...
创建的实例
假设我有一个Spring管理的单例类,如下所示:
@Component
@Scope("singleton")
public class mySingletonClass implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Resource private transient Service1 service1;
@Resource private transient Service2 service2;
...
}
我还需要覆盖readResolve()
吗?在反序列化对象时,IoC Container是否会阻止创建新实例?我不想最终得到一个单例类的两个实例。