[编辑:编辑以反映更新的问题]
你的问题现在更清楚了。您似乎认为(如果我正确地遵循您的想法),autowire="byName"
您应该提供一个 bean 名称而不是byName
值。这是不正确的。autowire 属性可以采用一些可能的值,并且byName
是其中之一。当你在这里设置autowire
喜欢byName
时:
<bean name="someBean" class="foo.bar.Baz" autowire="byName />
然后 Spring 将查看someBean
( foo.bar.Baz
class) 中的所有字段,并尝试按名称连接该对象的所有字段。也就是说,(在您的情况下)如果 Customer 类有一个 field account
,Spring 将在其上下文中查找并尝试找到一个具有 name 的 beanaccount
以注入 Customer bean。
如果你定义了两个这样的 bean:
<bean name="customer" class="ultratech.com.Customer" autowire="byName" />
<bean name="account" class="ultratech.com.Account" />
那么你很好,如果 Customer 是这样的类:
public class Customer {
(...)
private Account account;
(...)
}
假设您的 Customer 类具有名为 account 和 credit 的字段,您的 XML 代码片段应该如下所示:
<beans>
<bean name="customer" class="ultratech.com.Customer" autowire="byName" />
<bean name="account" class="ultratech.com.Account" />
<bean name="credit" class="ultratech.com.Credit" />
</beans>
除了“byName”自动装配外,您还可以自动装配:
- no - 默认 - 不自动装配
- byType - 查找属性类型的 bean - 但要小心 - 只有一个这种类型的 bean 允许自动装配 byType;如果有不止一个,则会引发异常
- constructor - 与 byType 一样工作,但仅查找构造函数参数;所有构造函数参数都必须满足每个相应类型的一个 bean
有关更多信息,请参阅 Spring 参考:http:
//static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-autowire