Spring抛出错误:Bean定义是抽象的

我需要一些关于下一个主题的帮助。

我有一个bean的层次结构,就像那样:

        

我需要创建另一个包含对抽象类的引用的bean。 然后在运行时,我需要能够初始化TYPE“myPackage.Father”的变量,并使用任何子类(多态机制)实例化它。 我的意思是这样的:

    

请注意,引用(myPackage.Another的实例)不是myPackage.Father的子类。 但是使用这些行Spring会抛出下一个错误:

 Bean definition is abstract 

我怎么处理它?

我感谢任何帮助,提前谢谢!

首先,抽象bean与抽象类无关,它们甚至不需要映射到类。它们用于对另一个bean共享的公共属性进行分组。但是你不能使用抽象bean作为参考连接另一个bean中的属性。 如果你的bean myPackage.Another有myPackage.Father类型的引用,并且你的子bean可以赋值给myPackage.Father,那么你可以在myPackage.Another bean中连接childA或childB,就像这样

     

抽象bean永远不会被实例化为对象,它们只以定义的forms存在。

从文档: http : //docs.spring.io/spring/docs/3.0.x/reference/beans.html父bean本身无法实例化,因为它不完整,并且它也明确标记为抽象。 当定义是这样的抽象时,它只能用作纯模板bean定义,用作子定义的父定义。 尝试使用这样一个抽象的父bean,通过将它作为另一个bean的ref属性引用或者使用父bean id进行显式的getBean()调用,会返回一个错误。 类似地,容器的内部preInstantiateSingletons()方法忽略定义为abstract的bean定义。

在你的情况下

    

是指引起问题的定义为抽象的bean。

抽象类和抽象bean之间没有什么不同。当你使用bean并引用另一个抽象的bean时,它意味着你想要实例化一个抽象类,它无法正常工作! 当你使用抽象类时要小心! 抽象类用于模板类,您可以扩展它!