当我尝试将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 :(得分: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()
}