3.4.9bean的自动装配
spring支持4种自动装配:byName、byType、constructor和autodetect。
当使用byName绑定时,spring会将每一个属性绑定到同名的bean上。所以,如果目标bean包含一个名为foo的属性并且在BeanFactory种定义过一个名为foo的bean,则名为foo的bean就会被指定到目标的foo属性上。见代码的byName例子。
当使用byType自动装配时,Spring会将目标bean上的每一个属性自动跟BeanFactory种同类型的bean自动装配。所以如果目标bean上包含一个String类型的属性并且BeanFactory中包含一个String类型bean,Spring将把String类型的bean关联到目标beanString属性上。如果有布置一个相同类型的bean,此例中是String,Spring就会因为不能决定到底应该与谁自动装配而抛出一个异常。
constructor绑定方式跟byType绑定功能上相似,只是他使用构造方法而不是设置方法来进行注入,Spring会去匹配参数最多的构造方法。因此如果你的bean有两个构造方法,其中一个接受一个String而另一个接受一个String和一个Integer作为参数,而BeanFactory中正好包含一个String bean和一个Integer bean,则Spring将使用两个参数的构造方法。
最后一种方式,autodetect,让Spring在constructor和byType两种方法中自动选择。如果你的bean有一个默认构造函数,Spring就使用byType方式,否则就使用constructor方式。
下面就是例子代码:
Target(Foo, Bar)Target{foo=com.apress.prospring2.ch03.autowiring.Foo, foo2=null, bar=com.apress.prospring2.ch03.autowiring.Bar}