【问题标题】:Spring: how to set multiple properties through autowiring?Spring:如何通过自动装配设置多个属性?
【发布时间】:2013-01-01 06:44:00
【问题描述】:

在我发现的所有自动装配示例中,该示例大约是一个<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 添加到 bean 的任何属性分开。

【问题讨论】:

  • 你的意思是通过 XML 正确连接 bean 在这种情况下,这不是自动连接,它只是连接,因为你必须手动进行;)
  • bean 中有多个属性?还是多个值?多个值肯定会失败,因为 Spring 无法解决关联的内容。所以请用示例代码片段解释一下。
  • 我添加了示例以明确我的问题。
  • 我已经更新了我的回复,以匹配您澄清的问题:)

标签: java spring properties autowired


【解决方案1】:

[编辑:编辑以反映更新的问题]

你的问题现在更清楚了。您似乎认为(如果我正确地遵循您的想法),在 autowire="byName" 中您应该提供一个 bean 名称而不是 byName 值。 这是不正确的。 autowire 属性可以采用一些可能的值,byName 就是其中之一。当您将autowire 设置为byName 时,如下所示:

<bean name="someBean" class="foo.bar.Baz" autowire="byName />

然后 Spring 将查看 someBeanfoo.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" />

那么你很好,如果 Customer 是这样的类:

public class Customer {
    (...)
    private Account account;
    (...)
}

这是您的 XML 代码 sn-p 的样子,假设您的 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”自动装配外,您还可以自动装配:

  1. no - 默认 - 不自动装配
  2. byType - 查找属性类型的 bean - 但要小心 - 只有一个这种类型的 bean 允许自动装配 byType;如果有多个,则会引发异常
  3. constructor - 与 byType 类似,但仅查找构造函数参数;所有构造函数参数都必须满足每个相应类型的一个 bean

有关更多信息,请参阅 Spring 参考: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-autowire

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2015-11-05
    • 2012-10-25
    • 2019-04-21
    • 2019-03-04
    • 2018-09-18
    • 2012-01-25
    相关资源
    最近更新 更多