Подтвердить что ты не робот

Spring bean использование псевдонима

Я знаю, что означает bean alias в spring. Но я хочу знать варианты использования для использования псевдонима. Почему кто-то хочет ссылаться на bean на имя псевдонима вместо имени?

Спасибо заранее.

4b9b3361

Ответ 1

Использование, которое я видел, следующее: у вас есть два экземпляра данного интерфейса (SomeBean): один для среды A и один для среды B. Таким образом, вы определяете два beans: один с именем "someBeanForA", а другой - "someBeanForB".

beans, где этот SomeBean должен быть введен, не знает, какой из них он должен использовать: он зависит от среды. Поэтому они используют псевдоним:

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

При развертывании в среде A псевдоним в файле XML указывает на someBeanA. При развертывании в среде B псевдоним в XML файле указывает на некоторый BeanB.

Ответ 2

Я думаю, что справочная документация объясняет это очень хорошо:

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

Указание всех псевдонимов, где фактически определено bean, не является всегда адекватный. Иногда желательно ввести псевдоним для bean, который определен в другом месте. Это обычно имеет место в больших системах, где конфигурация разделена между каждой подсистемой, каждая подсистема имеет свой собственный набор определений объектов. На основе XML метаданных конфигурации, вы можете использовать элемент для выполнения это.

Конкретным примером может быть то, где вы должны определить точку входа для проверки подлинности в модуле Single Sign On для нескольких приложений. Вы определяете его в одном определении Spring bean, и вы используете его в своем конкретном приложении для использования в качестве точки входа для проверки подлинности.

Ответ 3

В документе springframework docs есть пример.

В качестве конкретного примера рассмотрим случай, когда компонент A определяет DataSource bean, называемый componentA-dataSource, в его фрагменте XML. Компонент B, однако, хотел бы ссылаться на DataSource как componentB-dataSource в своем XML-фрагменте. И основное приложение, MyApp, определяет собственный фрагмент XML и собирает окончательный контекст приложения из всех трех фрагментов и хотел бы к DataSource как myApp-dataSource.

Ответ 4

Мы использовали псевдоним в нашем проекте и причина, по которой мы использовали это, потому что

В случае использования архитектура такова, что идентификаторы bean упоминаются в столбце главной таблицы базы данных. Поэтому, когда поток вызывается, он считывает таблицу и загружает bean с тем же именем, указанным в столбце. Определение bean присутствует в applicationContext, который является частью jar, и мы не можем его изменить.

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

Это также помогает в сценарии нескольких сред. Если присутствуют псевдонимы, нам не нужно запускать script для обновления значения столбца в каждой среде.