2009-06-08 87 views
1

我非常喜歡使用apache-digester將XML文件加載到我的對象模型中。有沒有辦法讓apache-digester實習某些屬性的字符串?

我正在處理大型文件,其中包含許多重複(事件日誌),因此會喜歡String.intern()字符串的特定屬性(經常重複的)。由於Apache-Digester在放棄控制權之前讀取整個文件,因此最初會產生大量重複,消耗大量內存;然後我可以去遍歷所有的對象和實習生,但是我仍然花費大量的內存。

另一個修改是在我的對象模型中我的對應setProperty bean函數總是實習參數,但是我在我的代碼中使用了相同的函數,因此這將是浪費的;此外,我不想將蒸煮器特定的代碼引入到我的模型中。

有沒有辦法讓Digester實習或在設置屬性之前/之後執行自定義代碼?

回答

3

您可以創建自己的沼氣池規則來實現:

public class InternRule extends BeanPropertySetterRule 
{ 
    public InternRule(String propertyName) 
    { 
     super(propertyName); 
    } 

    @Override 
    public void body(String namespace, String name, String text) 
     throws Exception 
    { 
     super.body(namespace, name, text.intern()); 
    } 

} 

而不是做:

digester.addBeanPropertySetter("book/author", "author"); 

你可以這樣做:

digester.addRule("book/author", new InternRule("author")); 

根據其消化方法你使用的是你可以繼承的不同的類(SetPropertyRule,CallMethodRule等)

相關問題