我非常喜欢使用apache-digester将XML文件加载到我的对象模型中。
我正在处理包含许多重复项(事件日志)的大型文件,因此想要String.intern()特定属性的字符串(经常重复的字符串)。
由于Apache-Digester在放弃控制之前读取整个文件,因此它最初会产生大量重复,占用大量内存;然后我可以去迭代我的所有对象和实习生,但我仍然要花费大量的内存。
另一个有效的方法是让我的对象模型中的相应setProperty bean函数始终在参数中实现,但是我在我的代码中使用了已经实现的字符串中的相同函数,这样会浪费;此外,我不想在我的模型中引入特定于沼气池的代码。
有没有办法让Digester在设置属性之前/之后实习或执行自定义代码?
答案 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等)