【问题标题】:Spring Core - Alias and IdsSpring Core - 别名和 ID
【发布时间】:2015-03-30 15:23:44
【问题描述】:

我今天开始学习 Spring,遇到了一个奇怪的行为,因此寻求任何专家的帮助。我定义了一个带有 id 的 bean,并验证了该 bean 可通过 ApplicationContext 和 Bean 工厂获得。后来创建了更多具有不同 ID 的 bean,但创建了一个与第一个 Bean 完全相同的 Id 的别名(下面的 xml sn-p)

<!-- Beans -->
<bean id="wolf" class="com.badwolf.spring.SpringWolf">
    <constructor-arg type="java.lang.String" value="wolfy" />
    <constructor-arg index="1" value="20" />
</bean>

<bean id="sweetWolf" class="com.badwolf.spring.SweetWolf" />

<!-- Aliases -->
<alias name="sweetWolf" alias="wolf" />    

现在在实现类中使用“wolf”获取 bean,然后获取与“Alias”关联的 bean。这是 Spring 的预期行为吗?别名是否优先于 bean 定义(这似乎是 Spring 的核心)?

如果我的项目被拆分为多个团队,并且在集成时有人使用了相同的 id 和别名,并且突然部分功能停止工作,该怎么办。

【问题讨论】:

    标签: spring


    【解决方案1】:

    首先,这里有三个 Spring bean 术语,name、alias 和 id。 Spring bean 可以有多个名称、别名,而它只能有一个唯一的 id。

    以下是来自Spring doc的参考

    每个 bean 都有一个或多个标识符。这些标识符在承载 bean 的容器中必须是唯一的。一个 bean 通常只有一个标识符,但如果需要多个标识符,则可以将多余的标识符视为别名。

    因此,在您的情况下,id 为“wolf”的 bean 具有 Spring 生成的名称(“springwolf”),而 id 为“sweetWolf”的 bean 有两个名称,Spring 生成的名称(“sweetWolf”)和名称别名( "狼") (spring-bean-names)。

    别名与名称的相关讨论(12

    alias vs id (1)的相关讨论

    【讨论】:

    • 我确实理解了名称、别名和 ID 的概念,但我在 Spring 文档中找不到 Spring 要求 bean 的“名称”的参考,如果没有提供名称,则提供名称通过它自己。另外,我找不到提到 Spring 使用“名称”属性仅通过任何工厂查找 bean 的参考。
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2012-04-19
    • 1970-01-01
    • 2018-08-25
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多