我需要一些关于下一个主题的帮助。
我有一个 bean 层次结构,就像这样:
<bean id="father" class="myPackage.Father" abstract="true"/>
<bean id="childA" class="myPackage.ChildA" parent="father">
<property name="atrib1" value="hello"></property>
</bean>
<bean id="childB" class="myPackage.ChildB" parent="father">
<property name="atrib2" value="bye"></property>
<property name="atrib3" value="other"></property>
</bean>
我需要创建另一个包含对抽象类的引用的 bean。然后在运行时,我需要能够初始化一个类型为“myPackage.Father”的变量,并用任何子类(多态机制)实例化它。我的意思是这样的:
<bean id="reference" class="myPackage.Another">
<property name="atrib4" ref="father"></property>
</bean>
请注意,引用(myPackage.Another 的实例)不是 myPackage.Father 的子类。但是对于这些行,Spring 会抛出下一个错误:
Bean definition is abstract
我该如何处理?
非常感谢任何帮助,提前致谢!
最佳答案
抽象 bean 永远不会实例化为对象,它们仅以定义的形式存在。
来自文档:http://docs.spring.io/spring/docs/3.0.x/reference/beans.html 父bean不能自己实例化,因为它是不完整的,它也被显式标记为abstract。当定义像这样抽象时,它只能用作纯模板 bean 定义,用作子定义的父定义。尝试单独使用这样的抽象父 bean,通过将其作为另一个 bean 的 ref 属性引用或使用父 bean id 进行显式 getBean() 调用,返回错误。同样,容器的内部 preInstantiateSingletons() 方法会忽略定义为抽象的 bean 定义。
你的情况
<bean id="reference" class="myPackage.Another">
<property name="atrib4" ref="father"></property>
</bean>
指的是导致问题的定义为抽象的 bean。
关于java - Spring 抛出错误 : Bean definition is abstract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094782/