我有两个抽象类
class abstract A {
//some methods .
}
class abstract B extends A {
private C c ;
//other methods
}
Spring配置文件:
<bean id="b" class="B" abstract="true">
<property name="c" ref="C" /> //I have reference for C else where
</bean>
当我运行程序时,c类没有被注入。它是空的。我错过了什么吗?
答案 0 :(得分:4)
abstract=true
表示bean规范是一个&#39;模板&#39;对于其他bean声明来扩展,并不意味着该类是抽象的。我怀疑没有创建标识为b
的bean,因为它是模板/抽象定义。删除abstract=true
并使B
成为具体类型,它应该有效。
此处的文档:http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-child-bean-definitions
答案 1 :(得分:0)
您没有在抽象类B中显示C的setter。您必须使用设置或构造函数注入。发布的代码不起作用。
您还应该将B指定为C的父bean;同样A为B。
答案 2 :(得分:0)
尽管使用'abstract =“true”'并不意味着bean规范是针对抽象类的,但仍然需要抽象类bean定义,以便不对该类进行预实例化。 (对于抽象类来说会失败)。这在上面链接指向的部分下面的注释中指出(http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-child-bean-definitions)。如果这是超级类不是抽象类的情况,那么是的,'abstract =“true”'不应该被使用。