2010-01-11 33 views
1

当我尝试使用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() 

回答

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() 
}