Spring bean别名用法

New*_*bie 13 java spring

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

提前致谢.

JB *_*zet 7

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

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

@Autowired
@Qualifier("someBeanAlias")
private SomeBean someBean;
Run Code Online (Sandbox Code Playgroud)

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


Eld*_*ael 6

我认为参考文档很好地解释了它:

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

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

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

  • 假设您正在实现应用程序的表示模块.您知道这取决于服务,该服务在另一个模块中定义,由其他人实现,但尚未提供.因此,您决定为此服务指定名称并在代码中使用它.实现服务模块后,似乎authot没有选择与您选择的名称相同的名称.因此,您可以使用所选名称定义别名,并指向服务的实际名称. (5认同)