从“Spring in Action”一书中,我看到了这个配置xml文件:
<bean id="knight" class="com.springinaction.knights.BraveKnight">
<constructor-arg ref="quest" />
Inject quest bean
</bean>
究竟是什么<constructor-arg ref="quest" />
?这是否意味着每次我在构造函数中调用quest作为引用时它会获取一个BraveKnight?
提前致谢。
答案 0 :(得分:4)
您拥有的XML代码段称为 bean定义。您正在声明Spring可以为您生成的bean。
使用<constructor-arg>
告诉Spring使用com.springinaction.knights.BraveKnight
构造函数,该构造函数接受id quest
引用的bean的任何类型的参数,并在构造函数调用中注入该bean。这称为constructor based dependency injection
。 It is covered here.
给出两个班级
class Foo {}
class Bar {
private Foo foo;
public Bar (Foo foo) {
this.foo = foo;
}
}
以及以下bean定义
<bean id="foo" class="Foo" />
<bean id="bar" class="Bar">
<constructor-arg ref="foo">
</bean>
将创建一个标识为Foo
的{{1}} bean。在调用foo
构造函数来创建标识为Bar
的bean时,将使用该bean。请记住,这一切都是通过反思完成的。