2012-04-30 11 views
8

के CGLIB सबक्लास उत्पन्न नहीं कर सका मैं कुछ JPA repository इंटरफेस प्रॉक्सी करने के लिए स्प्रिंग के <aop:aspectj-autoproxy /> का उपयोग कर रहा हूं।स्प्रिंग एस्पेक्टजे डबल-प्रॉक्सीइंग इंटरफ़ेस में विफल रहता है: क्लास

हालांकि, प्रॉक्सी निम्नलिखित Cannot subclass final class class $Proxy80 साथ विफल हो रहा है:

वर्ग [वर्ग $ Proxy80] की CGLIB उपवर्ग उत्पन्न नहीं कर सके: इस समस्या के सामान्य कारणों के लिए एक अंतिम वर्ग या एक गैर दृश्य का उपयोग शामिल है कक्षा; नेस्टेड अपवाद java.lang.IllegalArgumentException है: नहीं कर पा रहे उपवर्ग अंतिम वर्ग वर्ग $ Proxy80

त्रुटि के रूप में, और एक त्वरित गूगल, पता चलता है - यह तब होता है जब प्रॉक्सी लक्ष्य एक अंतिम वर्ग है। हालांकि, इस श्रृंखला में, कोई वर्ग नहीं हैं - केवल इंटरफेस। वसंत रनटाइम पर सभी कार्यान्वयन उत्पन्न करता है। , परिभाषित के रूप में निम्नानुसार

public interface AuthorDAO extends 
    CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> { 

} 

नोट मैं वसंत के JpaRepository और QueryDslPredicateExecutor के एक कस्टम उपवर्ग उपयोग कर रहा हूँ:

यहां इंटरफ़ेस की परिभाषा है कि नाकाम रहने है

public interface CrossStoreJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {} 
public interface CrossStoreQueryDslPredicateExecutor<T> extends QueryDslPredicateExecutor<T>{} 

कहीं और, मैं कस्टम को परिभाषित इन इंटरफेस पर विधियों के पहलुओं:

@Aspect 
@Component 
public class DocumentLoadingAspect extends AbstractDocumentAspect { 

    @Around("execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))") 
    public Object loadCrossStoreEntity(ProceedingJoinPoint pjp) throws Throwable 
    { 
     // implementation omitted 
    } 

मैंने पुष्टि की है कि यह @Aspect परिभाषाएं हैं जो उन्हें हटाकर और फिर से चलाने के द्वारा समस्या उत्पन्न कर रही हैं।

इस त्रुटि का कारण क्या है? ऐसा लगता है कि प्रॉक्सी एक प्रॉक्सी किसी कारण से विफल रहा है।

+0

क्या आपको इसके लिए समाधान मिला? इंटीग्रेशन गेटवे इंटरफ़ेस पर मुझे वही त्रुटि मिल रही है। – Ocelot

उत्तर

0

मेरा अनुमान है कि वसंत डेटा जेपीए एक जावा प्रॉक्सी जो अंतिम और फिर <aop:aspectj-autoproxy /> अपने पहलू प्रति एक और प्रॉक्सी बनाने के लिए करने का प्रयास है cglib उपवर्गीकरण जो काम नहीं करेगा का उपयोग कर के रूप में रेपो कार्यान्वयन बनाता है। proxy-target-class autoproxy तत्व पर true पर सेट है?

संबंधित मुद्दे