【问题标题】:problem with injecting abstract class in springspring注入抽象类的问题
【发布时间】:2011-03-07 13:14:52
【问题描述】:

我有两个抽象类

class abstract A {
//some methods .
}

class abstract B extends A {
 private  C  c ;
//other methods
}

弹簧配置文件:

<bean id="b" class="B" abstract="true">
    <property name="c" ref="C" />   //I have reference for C else where
</bean>

当我运行程序时,c 类没有被注入。它以 null 的形式出现。我错过了什么吗?

【问题讨论】:

  • 如何创建 B 的实例?

标签: java spring dependency-injection ioc-container


【解决方案1】:

abstract=true 表示 bean 规范是其他 bean 声明扩展的“模板”,并不意味着该类是抽象的。我怀疑没有创建 id b 的 bean,因为它是一个模板/抽象定义。删除 abstract=true 并使 B 成为具体类型,它应该可以工作。

此处的文档:http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-child-bean-definitions

【讨论】:

    【解决方案2】:

    您没有在抽象类 B 中显示 C 的设置器。您必须使用设置或构造函数注入。发布的代码无法运行。

    您还应该将 B 指定为 C 的父 bean; B 也是 A。

    【讨论】:

    • C 有二传手。我正在使用 setter 注入。
    【解决方案3】:

    虽然使用 'abstract="true"' 并不表示 bean 规范是针对抽象类的,但它仍然是抽象类 bean 定义所必需的,因此不会尝试在该类上进行预实例化(对于抽象类会失败)。这在上述链接指向的部分下方的注释中指出(http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-child-bean-definitions)。如果这是超类不是抽象类的情况,那么是的,不应该使用'abstract="true"'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-13
      • 2016-07-19
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      相关资源
      最近更新 更多