在Spring中实例化泛型类bean时出现问题
我试图在Spring中实例化一个泛型类,但出现以下异常: bean初始化失败;嵌套异常是 org.springframework.aop.framework.aopconfigeexception:无法生成类[class football.dao.jpa.GenericJpaDAO]的CGLIB子类:此问题的常见原因包括使用最终类或不可见类;嵌套异常为java.lang.IllegalArgumentException:超类没有空构造函数,但未提供任何参数: 这是Spring容器的XML配置:在Spring中实例化泛型类bean时出现问题,spring,generics,dependency-injection,Spring,Generics,Dependency Injection,我试图在Spring中实例化一个泛型类,但出现以下异常: bean初始化失败;嵌套异常是 org.springframework.aop.framework.aopconfigeexception:无法生成类[class football.dao.jpa.GenericJpaDAO]的CGLIB子类:此问题的常见原因包括使用最终类或不可见类;嵌套异常为java.lang.IllegalArgumentException:超类没有空构造函数,但未提供任何参数: 这是Spring容器的XML配置:
<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
}
公共类GenericJpaDAO{
私人实体管理者;
私有类实体类;
私有字符串entityName;
public GenericJpaDAO(类entityClass,字符串entityName,
实体管理工厂(工厂){
this.entityClass=entityClass;
this.entityName=entityName;
em=emFactory.createEntityManager();
}
@交易的
公共无效创建(T实体){
em.persist(实体);
}
//更多方法
}
我真的不确定是什么导致了这一切。如果有任何想法,我将不胜感激。这个问题与泛型无关,它是Spring AOP的一个限制 如果使用CGLIB代理将方面(包括
@Transactional
方面)应用于类(如果目标类未实现任何接口,或者如果AOP配置了proxy target class=“true”
),则不需要参数构造函数:
public class GenericJpaDAO <T extends HavingID> {
...
public GenericJpaDAO() {}
public GenericJpaDAO( Class entityClass, String entityName,
EntityManagerFactory emFactory ) { ... }
...
}
公共类GenericJpaDAO{
...
public GenericJpaDAO(){}
public GenericJpaDAO(类entityClass,字符串entityName,
EntityManagerFactory(工厂){…}
...
}
另请参见: