Spring IoC контейнер: обзор Bean, именование Beans, псевдоним Bean вне определения Bean

В самом определении компонента (bean) вы можете указать более одного имени для компонента, используя комбинацию из одного имени, указанного в атрибуте id, и любого количества других имен в атрибуте name. Эти имена могут быть эквивалентными псевдонимами одного и того же компонента и могут быть полезны в некоторых ситуациях, например, позволяя каждому компоненту в приложении ссылаться на общую зависимость, используя имя компонента, специфичное для самого компонента.

Однако указание всех псевдонимов, в которых фактически определен компонент, не всегда адекватно. Иногда желательно ввести псевдоним для компонента, который определен в другом месте. Это обычно имеет место в больших системах, где конфигурация разделена между каждой подсистемой, где каждая подсистема имеет свой собственный набор определений объектов. В метаданных конфигурации на основе XML для этого можно использовать элемент <alias/>. В следующем примере показано, как это сделать:

<alias name="fromName" alias="toName"/>

В этом случае bean-компонент (в том же контейнере) с именем fromName может также после использования этого определения псевдонима называться toName.

Например, метаданные конфигурации для подсистемы A могут ссылаться на DataSource по имени subsystemA-dataSource. Метаданные конфигурации для подсистемы B могут ссылаться на DataSource по имени subsystemB-dataSource. При создании основного приложения, использующего обе эти подсистемы, основное приложение ссылается на источник данных по имени myApp-dataSource. Чтобы все три имени ссылались на один и тот же объект, вы можете добавить следующие определения псевдонимов в метаданные конфигурации:

<alias name="myApp-dataSource" alias="subsystemA-dataSource"/>
<alias name="myApp-dataSource" alias="subsystemB-dataSource"/>

Теперь каждый компонент и основное приложение могут ссылаться на источник данных через уникальное имя, которое гарантированно не будет конфликтовать с каким-либо другим определением (эффективно создающим пространство имен), но они ссылаются на один и тот же компонент.

Java-конфигурации

Если вы используете Javaconfiguration, аннотация @Bean может использоваться для предоставления псевдонимов.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки