문제

콜백 필터 (수만 개의 객체에서)와 함께 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()
도움이 되었습니까?

해결책

익명의 내부 클래스 대신 인스턴스 변수로 콜백 필터를 설정하면 속도가 증가하는 것으로 보입니다.

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()
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top