在我找到的所有自动装配示例中,示例是关于一个<bean>
autowire
属性,例如设置为byName
,并且只有一个属性值应该通过自动装配设置。
我的问题是,如果<bean>
有多个属性要通过自动装配设置,该怎么办?似乎没有人解释这种情况。有人可以解释我是否可以或者是否应该使用autowire
在bean中设置多个属性?以下是我想通过自动装配设置客户bean的帐户和信用属性的情况示例:
<beans>
<bean name="customer" class="ultratech.com.Customer" autowire="byName">
<bean name="account"/>
<bean name="credit>
</beam>
<bean name="account" class="ultratech.com.Account"/>
<bean name="credit" class="ultratech.com.Credit"/>
</beans>
另外,如果我错了,请纠正我,但如果我要使用注释(@Autowire
),那么我的问题很容易解决,因为我可以将@Autowire
添加到任何豆的属性。
答案 0 :(得分:2)
[编辑:编辑以反映更新的问题]
现在你的问题要清楚得多了。你似乎认为(如果我正确地遵循你的想法),在autowire="byName"
你应该提供一个bean名而不是byName
值。
这是不正确的。 autowire属性可以采用一些可能的值,byName
就是其中之一。将autowire
设置为byName
时就像这里:
<bean name="someBean" class="foo.bar.Baz" autowire="byName />
然后Spring将查看someBean
(foo.bar.Baz
类)中的所有字段,并尝试按名称连接此对象的所有字段。也就是说,(在您的情况下)如果Customer类具有字段account
,Spring将查看其上下文并尝试查找名为account
的bean以注入Customer bean。
如果你定义了两个这样的bean:
<bean name="customer" class="ultratech.com.Customer" autowire="byName" />
<bean name="account" class="ultratech.com.Account" />
那么如果客户是这样一个班级,那么你很高兴:
public class Customer {
(...)
private Account account;
(...)
}
以下是您的XML代码段应该是什么样的,假设您的Customer类具有名为account和credit的字段:
<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”自动装配,你可以自动装配:
有关详细信息,请参阅Spring参考: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-autowire