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

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

Я запутался в использовании псевдонима. Я понимаю, что такое псевдоним и как он используется, но я не вижу, как это может быть иначе, чем использование имен в определении bean.

<bean id="xyx" name="abc,def" .. />

<alias name="xyx" alias="pqr"/>

Почему псевдоним, когда я могу использовать abc или def?

4b9b3361

Ответ 1

В моем сознании bean aliasing может быть полезным в большой системе, где вы не можете манипулировать именами bean. У вас есть возможность создать собственное имя (псевдоним), специфичное для вашей части системы...

из Spring документации (3.0.x) http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/

... иногда желательно дать одиночные bean несколько имен, иначе известный как bean сглаживание...

поэтому создание нескольких имен и/или псевдонимов - одно и то же.

Ответ 2

Alias ​​имеет специфический сценарий использования, который не имеет нескольких имен:

Представьте себе несколько конфигурационных xml файлов в вашем проекте, большинство из которых написаны вашими коллегами, и вам нужно добавить свой собственный файл config.xml. Используя вы можете обратиться к bean, определенному в другом файле конфигурации, с другим именем, которое может быть более значимым для вашей конфигурации, без необходимости касаться конфигурационных файлов ваших коллег.

Ответ 3

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

Ответ 4

Пример использования может быть, когда вы хотите настроить какой-либо beans, который уже определен где-то в модульном приложении (например, каждый модуль представляет собой проект spring), bean, возможно, определяется каркасом третьей части /API или даже вашей команды. В этом случае вы хотите, чтобы только внутри вашего проекта spring вызывать настраиваемую версию без изменения других модулей (проектов), чтобы сделать это, просто добавьте псевдоним в конфигурацию spring, которая действительно является мощной функцией:

<alias alias="globalBeanService" name="customizedBeanService" />

Следовательно, всякий раз, когда spring находит вызов globalBeanService, он будет вводить customizedBeanService для вас внутри вашего конкретного модуля. Без этой функции вы должны пройти все классы и вручную изменить bean.

Ответ 5

Недавно я нашел другой вариант использования, когда alias легко разрешил проблему.

Когда автоматическая настройка активна, Spring Boot предоставляет bean serverProperties, который может использоваться для доступа к информации о сервере, на котором в настоящее время выполняется веб-приложение.

В тестах интеграции (т.е. когда присутствует аннотация @SpringBootTest) тот же bean доступен под именем org.springframework.boot.autoconfigure.web.ServerProperties.

Конечно, для тестирования интеграции можно использовать другой профиль, но для этого потребуется ручная смена конфигурации в нескольких местах. Однако просто добавив

<alias name="serverProperties" alias="org.springframework.boot.autoconfigure.web.ServerProperties"/>

одни и те же файлы конфигурации могут использоваться для тестов интеграции и в процессе производства.

Это может быть ошибка в Spring Boot, однако alias легко разрешает проблему, не дожидаясь новой версии. И, конечно же, у меня нет возможности самостоятельно изменять конфигурацию загрузки.