java.beans.PersistenceDelegate 是 JavaBeans 長期持久化機制中的核心抽象類,負責定義對象如何被序列化為 XML 格式(XMLEncoder/XMLDecoder)。它不處理二進制序列化,專注於「語句式」持久化——即記錄「如何創建並初始化這個對象」的 Java 代碼語句序列。
initialize() 方法生成對象構造/初始化語句查看源碼(IDE 中 Ctrl+Shift+T 輸入類名)可見主要子類:
DefaultPersistenceDelegate:默認委託,適用於標準 JavaBean(有無參構造器 + getter/setter)ProxyPersistenceDelegate:處理動態代理對象EnumPersistenceDelegate:枚舉類型專用ArrayPersistenceDelegate:數組類型專用XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(
new FileOutputStream("config.xml")));
// 為無無參構造器的類註冊自定義委託
encoder.setPersistenceDelegate(ThirdPartyClass.class,
new DefaultPersistenceDelegate(new String[]{"constructorArg1", "constructorArg2"}));
encoder.writeObject(myObject);
encoder.close();
PersistenceDelegate delegate = new DefaultPersistenceDelegate() {
@Override
protected void initialize(Class> type, Object oldInstance, Object newInstance, Encoder out) {
super.initialize(type, oldInstance, newInstance, out);
// 跳過 password 等敏感字段
out.writeStatement(new Statement(oldInstance, "setPassword", new Object[]{"***"}));
}
};
encoder.setPersistenceDelegate(User.class, delegate);
建議直接閱讀 PersistenceDelegate.initialize() 源碼,理解其如何通過 Statement/Expression 構建對象圖。關鍵點:
instantiate() 創建對象實例initialize() 設置屬性狀態掌握 PersistenceDelegate,意味著你掌握了 Java 對象「可讀、可編輯、可版本控制」的長期持久化能力,是構建配置管理、工作流引擎等系統的關鍵技術。