Domanda

sto notando terribili velocità quando si cerca di utilizzare CGLIB con un filtro di richiamata (su decine di migliaia di oggetti), ma sono in grado di trovare tutte le informazioni su come ottimizzare CGLIB.

Per un'interfaccia di ricerca / list, il sistema sta caricando molteplici oggetti di una query ottimizzata e popolando la struttura di dominio con quelle proprietà. Per tutte le altre proprietà, il LazyLoader sta caricando l'oggetto completo. L'idea è quella di avere le proprietà di base utilizzate dal cercare / per caricare, senza perdere le classi del modello di dominio.

Esempio di base

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()
È stato utile?

Soluzione

Sembra che se Ho creato la CallbackFilter come variabile invece di una classe interna anonima esempio, la velocità aumenta.

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()
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top