在春天注入抽象类的问题

时间:2011-03-07 13:14:52

标签: java spring dependency-injection ioc-container

我有两个抽象类

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类没有被注入。它是空的。我错过了什么吗?

3 个答案:

答案 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”'不应该被使用。