Frage

Ich bin zu bemerken schreckliche Geschwindigkeiten, wenn sie versuchen CGLIB mit einem Rückruf-Filter zu verwenden (auf Zehntausende von Objekten), aber ich bin nicht in der Lage keine Informationen über die Optimierung CGLIB zu finden.

Für eine Suche / list-Schnittstelle wird das System mehr Eigenschaften aus einer optimierten Abfrage Laden und die Domänenstruktur mit diesen Eigenschaften bevölkern. Für alle anderen Eigenschaften, lädt die LazyLoader die volle Objekt. Die Idee ist, die grundlegenden Eigenschaften von der Suche / Liste Last verwendet haben, obwohl sie nicht die Domain-Modellklassen zu verlieren.

Basic-Beispiel

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()
War es hilfreich?

Lösung

Es scheint, dass, wenn ich die CallbackFilter als Instanzvariable, statt einer anonymen inneren Klasse, die Geschwindigkeit erhöht.

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()
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top