有没有办法让apache-digester到某些属性的实习字符串?

时间:2009-06-08 14:32:29

标签: java apache-commons-digester

我非常喜欢使用apache-digester将XML文件加载到我的对象模型中。

我正在处理包含许多重复项(事件日志)的大型文件,因此想要String.intern()特定属性的字符串(经常重复的字符串)。

由于Apache-Digester在放弃控制之前读取整个文件,因此它最初会产生大量重复,占用大量内存;然后我可以去迭代我的所有对象和实习生,但我仍然要花费大量的内存。

另一个有效的方法是让我的对象模型中的相应setProperty bean函数始终在参数中实现,但是我在我的代码中使用了已经实现的字符串中的相同函数,这样会浪费;此外,我不想在我的模型中引入特定于沼气池的代码。

有没有办法让Digester在设置属性之前/之后实习或执行自定义代码?

1 个答案:

答案 0 :(得分: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等)