Pregunta

Estoy notando terribles velocidades cuando se intenta utilizar CGLIB con un filtro de devolución de llamada (en decenas de miles de objetos) pero soy incapaz de encontrar ninguna información acerca de la optimización CGLIB.

Para una interfaz de búsqueda / lista, el sistema está cargando varias propiedades de una consulta optimizada y llenar el árbol de dominio con esas propiedades. Para todas las demás propiedades, el LazyLoader está cargando el objeto completo. La idea es tener las propiedades básicas utilizadas por la búsqueda / lista para cargar, sin perder las clases del modelo de dominio.

ejemplo básico

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()
¿Fue útil?

Solución

Parece que si me juego hasta la CallbackFilter como una variable de instancia en lugar de una clase interna anónima, la velocidad 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()
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top