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 に答える