Java 有没有办法让apache digester为某些属性实习字符串?
我非常喜欢使用apache digester将XML文件加载到我的对象模型中 我正在处理包含许多重复项(事件日志)的大型文件,因此希望为特定属性(经常重复的属性)的字符串设置String.intern() 由于Apache Digester在放弃控制之前读取整个文件,因此它最初会生成大量重复文件,占用大量内存;然后我可以去迭代我所有的对象和实习生,但我仍然要支付消耗大量内存的费用 另一个可取的做法是让对象模型中对应的setProperty bean函数始终插入参数,但我在代码中对已经插入的字符串使用相同的函数,这样做是浪费;此外,我不想在我的模型中引入特定于消化器的代码Java 有没有办法让apache digester为某些属性实习字符串?,java,apache-commons-digester,Java,Apache Commons Digester,我非常喜欢使用apache digester将XML文件加载到我的对象模型中 我正在处理包含许多重复项(事件日志)的大型文件,因此希望为特定属性(经常重复的属性)的字符串设置String.intern() 由于Apache Digester在放弃控制之前读取整个文件,因此它最初会生成大量重复文件,占用大量内存;然后我可以去迭代我所有的对象和实习生,但我仍然要支付消耗大量内存的费用 另一个可取的做法是让对象模型中对应的setProperty bean函数始终插入参数,但我在代码中对已经插入的字符串
在设置属性之前/之后,是否有办法让Digester实习或执行自定义代码 您可以创建自己的消化器规则来实现这一点:
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" ) );
根据您使用的digester方法,您可以子类化不同的类(SetPropertyRule、CallMethodRule等)