سؤال

إليك الرمز:

    Patient patient = factory.createPatient();           

    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(patient.getClass());
    enhancer.setCallback(new DefaultMethodInterceptor(patient));
    patient = (Patient) enhancer.create();

    assertThat(patient.getFirstName()).isNotNull();


    Enhancer enhancer2 = new Enhancer();
    enhancer2.setSuperclass(patient.getClass());
    enhancer2.setCallback(new DefaultMethodInterceptor(patient));
    patient = (Patient) enhancer2.create();

    assertThat(patient.getFirstName()).isNotNull();

فشل في تأكيد آخر مع

net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
...
Caused by: java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file my/package/entity/Patient$$EnhancerByCGLIB$$ca1e6685$$EnhancerByCGLIB$$f52743be

أسأل هذا لأنني أرغب في تعزيز كيانات السبات، لكن في بعض الأحيان ترجع بالفعل معززة منها في حد ذاته وفشل تعزيزي الثاني. كيف يمكنني تجنب ذلك؟

هل كانت مفيدة؟

المحلول

تحتاج إلى التحقق مما إذا كان صفك محسن بالفعل عبر Enhancer.isEnhanced() طريقة.

إذا كان الأمر كذلك، يجب تطبيق التحسين الثاني الخاص بك أصلي فئة، وليس الإصدار المحسن بالفعل كما تفعل في التعليمات البرمجية أعلاه. لا يزال بإمكانك مرفق التحسينات الخاصة بك MethodInterceptor.intercept() التنفيذ ولكن عليك أن تفعل ذلك بعناية.

نصائح أخرى

كان هذا مفيدا جدا بالنسبة لي، كذلك. أردت فقط الإشارة إلى أن استدعاء GetSoPerclass () حتى السلسلة والتحقق من محسن. يجب أن يحدد كل منها تحديد موقع Superclass المناسب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top