使用回调过滤器缓慢CGLIB性能

时间:2010-01-11 18:11:43

标签: java performance cglib

当我尝试将CGLIB与回调过滤器(在数万个对象上)一起使用时,我注意到了可怕的速度,但我无法找到有关优化CGLIB的任何信息。

对于搜索/列表界面,系统从优化查询加载多个属性,并使用这些属性填充域树。对于所有其他属性,LazyLoader正在加载完整对象。我们的想法是使搜索/列表使用的基本属性加载,同时不丢失域模型类。

基本示例

String name = rst.getString(1);

Enhancer enhancer = new Enchancer();
enhancer.setSuperclass(Type.class);
enhancer.setCallbackFilter(new CallbackFilter(){
    public int method(Method method){
        if("getName".equals(method.getName()){
            return 1;
        }
        return 0;
    }
});
enhancer.setCallbacks(new Callback[]{
    new LazyLoader(){...}
    new FixedValueImpl(name);
});
return (Type)enhancer.create()

1 个答案:

答案 0 :(得分:0)

看来,如果我将CallbackFilter设置为实例变量而不是匿名内部类,则速度会增加。

private CallbackFilter callbackFilter = new CallbackFilter(){...};

...

private Type createType(ResultSet rst){
    String name = rst.getString(1);

    Enhancer enhancer = new Enchancer();
    enhancer.setSuperclass(Type.class);
    enhancer.setCallbackFilter(this.callbackFilter);
    enhancer.setCallbacks(new Callback[]{
        new LazyLoader(){...}
        new FixedValueImpl(name);
    });
    return (Type)enhancer.create()
}