Spring bean别名用法

时间:2012-11-04 17:18:22

标签: java spring

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

提前致谢。

4 个答案:

答案 0 :(得分:6)

我认为reference documentation解释得非常好:

  

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

     

指定实际定义bean的所有别名不是   但总是足够的。有时候需要引入一个   其他地方定义的bean的别名。通常情况就是如此   在大型系统中,配置在每个子系统之间分配,   每个子系统都有自己的一组对象定义。在基于XML的   配置元数据,您可以使用该元素来完成   此

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

答案 1 :(得分:4)

我见过的用法如下:你有两个给定接口的实例(SomeBean):一个用于环境A,一个用于环境B.所以你定义了两个bean:一个名为“someBeanForA” “,另一个名为”someBeanForB“。

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

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

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

答案 2 :(得分:2)

springframework docs本身就有一个例子。

  

作为一个具体的例子,考虑组件A定义a的情况   DataSource bean在其XML片段中称为componentA-dataSource。   但是,组件B希望将DataSource称为   componentB-dataSource在其XML片段中。主要应用,   MyApp定义了自己的XML片段并组装了final   来自所有三个片段的应用程序上下文,并想参考   将数据源作为myApp-dataSource。

答案 3 :(得分:2)

我们在项目中使用了别名,我们之所以使用它是因为

对于一个用例,该体系结构使得在数据库主表列中提到了bean ID。因此,当调用流时,它会读取表并加载与列中提供的名称相同的bean。 bean定义存在于applicationContext中,它是jar的一部分,我们无法改变它。

现在对于某些实例,我们必须更改表列中的bean名称(以提供更好的命名约定),但由于我们无法更改上下文bean定义,因此我们使用别名将新名称映射到较旧的bean id。

这对多种环境的情况也有帮助。如果存在别名,我们不必运行脚本来更新每个环境中的列值。