我知道在spring中bean别名是什么意思。但是我想知道使用别名的用例。为什么有人要使用别名而不是它的名称来引用bean呢?
提前谢谢。
发布于 2012-11-05 01:27:42
我看到的一个用法如下:您有两个给定接口(SomeBean)的实例:一个用于环境A,另一个用于环境B。因此,您定义了两个bean:一个名为"someBeanForA",另一个名为"someBeanForB“。
必须注入此SomeBean的bean不知道它们必须使用哪一个:这取决于环境。所以他们使用别名:
@Autowired
@Qualifier("someBeanAlias")
private SomeBean someBean;在部署到环境A时,XML文件中的别名指向someBeanA。在部署到环境B时,XML文件中的别名指向someBeanB。
发布于 2012-11-05 01:27:44
我认为reference documentation很好地解释了这一点:
在bean定义本身中,您可以为bean提供多个名称,方法是使用id属性指定的最多一个名称和
属性中的任意数量的其他名称。这些名称可以是同一bean的等效别名,并且在某些情况下非常有用,例如允许应用程序中的每个组件通过使用特定于该组件本身的bean名称来引用公共依赖项。
但是,指定实际定义bean的所有别名并不总是足够的。有时需要为在其他地方定义的bean引入别名。这通常是在大型系统中的情况,其中配置在每个子系统之间拆分,每个子系统具有其自己的对象定义集。在基于XML的配置元数据中,您可以使用元素来完成此操作。
具体的示例可能是,您必须在多个应用程序的单点登录模块中定义身份验证的入口点。您可以在单个Spring Bean定义中对其进行定义,并在特定应用程序中为其设置别名,以便将其用作身份验证入口点。
发布于 2012-11-05 01:30:04
springframework docs本身就有一个例子。
作为一个具体的示例,考虑组件A在其DataSource片段中定义了一个名为componentA-dataSource的XML的情况。然而,组件B希望在其XML片段中将DataSource称为componentB-dataSource。主应用程序MyApp定义了自己的XML片段,并从所有三个片段组装了最终的应用程序上下文,并希望将DataSource称为myApp-dataSource.myApp-dataSource.xml。
https://stackoverflow.com/questions/13220919
复制相似问题