1

尝试将 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()
4

1 回答 1

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()
}
于 2010-01-11T18:41:30.397 回答