bean可以在抽象bean中自动装配吗?

时间:2016-08-26 10:42:37

标签: spring

我有一个抽象的豆子"家庭",一个孩子豆" homechild"和豆子#34;我的"被注入父母。我试图通过自动装配"我的"父母的豆子。但它不会发生。这是因为在抽象bean中自动装配是不可能的吗?

<bean id="home" class="my.test.own.spring_book_ch3.HomeImpl"
      autowire="byType" abstract="true"/>
<bean id="homechld" parent="home"/>
<bean id="my" class="my.test.own.spring_book_ch3.MyImpl"/>

当我明确注入时,它可以工作。

<bean id="home" class="my.test.own.spring_book_ch3.HomeImpl"
      autowire="byType" abstract="true">
  <property name="my" ref="my"/>
</bean>

1 个答案:

答案 0 :(得分:0)

简短回答是,抽象的父bean无法使用autowire进行注入。

从春天的reference document开始,子bean决定了自动装配模式

  

子bean定义从父级继承范围,构造函数参数值,属性值和方法覆盖,并带有添加新值的选项。您指定的任何范围,初始化方法,销毁方法和/或静态工厂方法设置都将覆盖相应的父设置。

     

其余设置始终取自子定义:取决于,自动装配模式,依赖性检查,单例,懒惰初始化

此外,容器会忽略实例化中的抽象bean,因此无需自动装配任何依赖项。

  默认情况下,

ApplicationContext预先实例化所有单例。因此,重要的是(至少对于单例bean )如果你有一个(父)bean定义你打算只用作模板,并且这个定义指定了一个类,你必须确保将abstract属性设置为true,否则应用程序上下文将实际(尝试)预先实例化抽象bean。