Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法让apache digester为某些属性实习字符串?_Java_Apache Commons Digester - Fatal编程技术网

Java 有没有办法让apache digester为某些属性实习字符串?

Java 有没有办法让apache digester为某些属性实习字符串?,java,apache-commons-digester,Java,Apache Commons Digester,我非常喜欢使用apache digester将XML文件加载到我的对象模型中 我正在处理包含许多重复项(事件日志)的大型文件,因此希望为特定属性(经常重复的属性)的字符串设置String.intern() 由于Apache Digester在放弃控制之前读取整个文件,因此它最初会生成大量重复文件,占用大量内存;然后我可以去迭代我所有的对象和实习生,但我仍然要支付消耗大量内存的费用 另一个可取的做法是让对象模型中对应的setProperty bean函数始终插入参数,但我在代码中对已经插入的字符串

我非常喜欢使用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等)