16

我知道 bean 别名在春天意味着什么。但我想知道使用别名的用例。为什么有人要使用别名而不是名称来引用 bean?

提前致谢。

4

4 回答 4

7

我见过的一种用法如下:给定接口 ( SomeBean) 的两个实例:一个用于环境 A,一个用于环境 B。因此您定义了两个 bean:一个名为“someBeanForA”,另一个名为“一些BeanForB”。

必须注入此 SomeBean 的 bean 不知道它们必须使用哪一个:这取决于环境。所以他们使用别名:

@Autowired
@Qualifier("someBeanAlias")
private SomeBean someBean;

部署到环境 A 时,XML 文件中的别名指向 someBeanA。部署到环境 B 时,XML 文件中的别名指向 someBeanB。

于 2012-11-04T17:27:42.430 回答
6

我认为参考文档解释得很好:

在 bean 定义本身中,您可以为 bean 提供多个名称,方法是使用由 id 属性指定的最多一个名称和 name 属性中任意数量的其他名称的组合。这些名称可以是同一个 bean 的等效别名,并且在某些情况下很有用,例如允许应用程序中的每个组件通过使用特定于该组件本身的 bean 名称来引用公共依赖项。

但是,指定实际定义 bean 的所有别名并不总是足够的。有时需要为在别处定义的 bean 引入别名。这在大型系统中很常见,其中配置在每个子系统之间进行拆分,每个子系统都有自己的一组对象定义。在基于 XML 的配置元数据中,您可以使用该元素来完成此操作。

一个特定的示例可能是您必须在单点登录模块中为多个应用程序定义身份验证入口点。您在单个 Spring Bean 定义中定义它,并在您的特定应用程序中为其设置别名以将其用作身份验证入口点。

于 2012-11-04T17:27:43.643 回答
2

We have used alias in our project and the reason why we used this is because

For an use case, the architecture is such that the bean ids are mentioned in an database master table column. So when the flow is invoked, it reads the table and loads the bean with the same name provided in the column. The bean definition is present in an applicationContext which is part of a jar and we cant change that.

Now for some instances, we had to change the bean name in the table column(to provide better naming convention) but since we cant change the context bean definition, we used aliases to map the new name to the older bean id.

This is also helps in the scenario of multiple environments. If aliases are present we don't have to run the script to update the column value in each environment.

于 2013-10-16T08:59:20.633 回答
2

springframework 文档本身有一个示例。

作为一个具体示例,考虑组件 A 在其 XML 片段中定义一个名为 componentA-dataSource 的 DataSource bean 的情况。然而,组件 B 希望在其 XML 片段中将 DataSource 称为 componentB-dataSource。主应用程序 MyApp 定义了自己的 XML 片段并从所有三个片段组装最终的应用程序上下文,并希望将 DataSource 称为 myApp-dataSource。

于 2012-11-04T17:30:03.533 回答