2010-10-19 12 views
8

próbuję instancję klasy rodzajowe wiosną, ale pojawia się następujący wyjątek:Problem instancji klasy rodzajowy fasoli wiosną

inicjalizacji fasoli powiodło; Zagnieżdżony wyjątek to org.springframework.aop.framework.AopConfigException: Nie można wygenerować podklasy CGLIB klasy [class football.dao.jpa.GenericJpaDAO]: Typowe przyczyny tego problemu to używanie klasy końcowej lub niewidocznej; Wyjątkiem jest zagnieżdżona java.lang.IllegalArgumentException: Nadklasa ma konstruktorów zerowe ale żadne argumenty otrzymali:

Jest to konfiguracja XML Spring pojemniku:

<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> 

Jest to klasa ogólna:

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 

} 

Nie jestem pewien, co może być przyczyną tego. Byłbym wdzięczny za wszelkie pomysły.

Odpowiedz

19

Ten problem nie jest związany z rodzajami, jest ograniczeniem Spring AOP.

Jeżeli elementy (w tym @Transactional aspekcie) są stosowane do klasy przy CGLIB proxy (Dzieje się tak, gdy klasa docelowy nie powoduje żadnych interfejsów lub AOP skonfigurowany proxy-target-class = "true") bez argumentu konstruktor wymagana jest

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

    public GenericJpaDAO() {} 

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

Zobacz także:

+1

Spring 4 with Objenesis umożliwia pośredniczenie klas bez domyślnego konstruktora (np .: no-arg), zobacz https://jira.springsource.org/browse/SPR-3150 – tukushan

Powiązane problemy