我有一个抽象的豆子"家庭",一个孩子豆" 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>
答案 0 :(得分:0)
简短回答是否,抽象的父bean无法使用autowire进行注入。
从春天的reference document开始,子bean决定了自动装配模式
子bean定义从父级继承范围,构造函数参数值,属性值和方法覆盖,并带有添加新值的选项。您指定的任何范围,初始化方法,销毁方法和/或静态工厂方法设置都将覆盖相应的父设置。
其余设置始终取自子定义:取决于,自动装配模式,依赖性检查,单例,懒惰初始化。
此外,容器会忽略实例化中的抽象bean,因此无需自动装配任何依赖项。
默认情况下,
ApplicationContext
预先实例化所有单例。因此,重要的是(至少对于单例bean )如果你有一个(父)bean定义你打算只用作模板,并且这个定义指定了一个类,你必须确保将abstract属性设置为true
,否则应用程序上下文将实际(尝试)预先实例化抽象bean。