带抽象类的java.lang.InstantiationException使用Conponent-Scan

时间:2015-06-25 07:27:01

标签: java spring

我有一个基于webservices的应用程序,其中存在多个类。一些类类型是abstract,它在其他类中扩展,用于将主体定义为抽象类方法。我用spring来实例化spring context xml中的类。我使用context:component-scan base-package="com.test.webservices"它扫描所有@Component类并进行实例化,但它不会扫描抽象类。

现在我的问题是,有没有使用组件扫描扫描抽象类的解决方案?

代码就像 -

@Component
public abstract class HibernateEntityManager{ ... }

@Component
public class HibernateGenericDaoImpl extends HibernateEntityManager{ ... }

在applicationContext.xml中我有

<context:component-scan base-package="com.test.webservices"/>

扫描所有类,不包括抽象类。

例外是: -


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManager' defined in ServletContext resource [/WEB-INF/classes/ApplicationContext/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.test.webservices.utils.HibernateEntityManager]: Is it an abstract class?; nested exception is java.lang.InstantiationException   

2 个答案:

答案 0 :(得分:2)

您的抽象类可能不是特定的bean,因为您无法实例化它。从抽象类中删除注释,并仅在具体类上使用它。

答案 1 :(得分:0)

结合使用时@Component注释的使用
<context:component-scan base-package="com.inn.webservices"/>

Spring尝试为带注释的类创建单例bean。在你的情况下,你应该有一个带注释的抽象类。将@Component annoation放在实现类上。