我有一个基于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
答案 0 :(得分:2)
您的抽象类可能不是特定的bean,因为您无法实例化它。从抽象类中删除注释,并仅在具体类上使用它。
答案 1 :(得分:0)
与
结合使用时@Component注释的使用<context:component-scan base-package="com.inn.webservices"/>
Spring尝试为带注释的类创建单例bean。在你的情况下,你应该有一个带注释的抽象类。将@Component annoation放在实现类上。