2010-10-19 6 views
8

मैं वसंत में एक सामान्य वर्ग का दृष्टांत कोशिश कर रहा हूँ, लेकिन में सामान्य वर्ग की फलियों instantiating:समस्या मैं अपवाद निम्न हो स्प्रिंग

सेम के सक्रियण असफल; नेस्टेड अपवाद org.springframework.aop.framework.AopConfigException: वर्ग [वर्ग football.dao.jpa.GenericJpaDAO] के CGLIB उप-वर्ग उत्पन्न नहीं कर सका: इस समस्या के सामान्य कारणों में अंतिम श्रेणी या गैर-दृश्यमान वर्ग का उपयोग करना शामिल है; नेस्टेड अपवाद java.lang.IllegalArgumentException है: सुपर क्लास नहीं अशक्त कंस्ट्रक्टर्स है, लेकिन कोई तर्क दिए गए थे:

<bean id="clubDAO" class="football.dao.jpa.GenericJpaDAO"> 
    <constructor-arg type="EntityManagerFactory" ref="entityManagerFactory"/> 
    <constructor-arg type="Class" value="football.model.entities.ClubEntity"/> 
    <constructor-arg type="String" value="ClubEntity"/> 
</bean> 

यह सामान्य वर्ग है:

यह वसंत कंटेनर के लिए एक्सएमएल विन्यास है

public class GenericJpaDAO <T extends HavingID> { 

    private EntityManager em; 
    private Class entityClass; 
    private String entityName; 

    public GenericJpaDAO(Class entityClass, String entityName, 
     EntityManagerFactory emFactory) { 
    this.entityClass = entityClass; 
    this.entityName = entityName; 
    em = emFactory.createEntityManager(); 
    } 

    @Transactional 
    public void create(T entity) { 
     em.persist(entity); 
    } 
    // more methods 

} 

मुझे सच में यकीन नहीं है कि इसका कारण क्या हो सकता है। मैं किसी भी विचार की सराहना करता हूं।

उत्तर

19

यह समस्या जेनेरिक से संबंधित नहीं है, यह स्प्रिंग एओपी की एक सीमा है।

पहलुओं (@Transactional पहलू सहित) वर्ग CGLIB प्रॉक्सी (यदि ऐसा होता है, तो लक्ष्य वर्ग किसी भी इंटरफेस को लागू नहीं करता है या AOP proxy-target-class = "true" के साथ विन्यस्त किया गया है) का उपयोग कर के लिए लागू कर रहे हैं, कोई तर्क निर्माता की जरूरत है:

public class GenericJpaDAO <T extends HavingID> { 
    ... 

    public GenericJpaDAO() {} 

    public GenericJpaDAO(Class entityClass, String entityName, 
     EntityManagerFactory emFactory) { ... } 
    ... 
} 

यह भी देखें:

+1

ओब्जेनेसिस के साथ स्प्रिंग 4 कक्षाओं के प्रॉक्सीइंग को बिना किसी डिफ़ॉल्ट (यानी: नो-एर्ग) कन्स्ट्रक्टर के साथ अनुमति देता है, https://jira.springsource.org/browse/SPR-3150 देखें – tukushan

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