Есть ли разница между использованием id
атрибута и name
атрибута для <bean>
элемента в файле конфигурации Spring?
spring
configuration
Дункан Джонс
источник
источник
Ответы:
Из ссылки Spring , 3.2.3.1 Именование Beans :
Таким образом, в основном
id
атрибут соответствует стандартам атрибутов XML id, тогда какname
он немного более гибкий. Вообще говоря, я использую вname
значительной степени исключительно. Это только кажется больше "Spring-y".источник
Начиная с Spring 3.1,
id
атрибут являетсяxsd:string
и допускает тот же диапазон символов, что иname
атрибут.Единственное отличие между a
id
и aname
состоит в том, что aname
может содержать несколько псевдонимов, разделенных запятой, точкой с запятой или пробелом, тогда как aid
должно быть одним значением.Из документации Spring 3.2:
источник
Либо один будет работать. Это зависит от ваших потребностей:
если ваш идентификатор компонента содержит специальный символ (ы), например, (
/viewSummary.html
), он не будет использоваться в качестве компонентаid
, поскольку он не является допустимым идентификатором XML. В таких случаях вы можете пропустить определение компонентаid
иname
вместо него предоставить компонент . Атрибут также помогает в определении эс для боба, так как он позволяет задать несколько идентификаторов для данного компонента.name
alias
источник
Существует несколько незначительных различий, например, использование id вызовет исключение, если не обрабатывается должным образом.
позвольте мне ответить на вопрос ниже
Нет никакой разницы. вы будете испытывать тот же эффект, когда идентификатор или имя используются в теге <bean>.
Как?
И атрибуты id, и name дают нам возможность предоставить бину значение идентификатора (на данный момент, думаю, id означает id, но не идентификатор). В обоих случаях вы увидите один и тот же результат, если позвоните
applicationContext.getBean("bean-identifier");
.Возьмите @Bean, Java-эквивалент тега <bean>, вы не найдете атрибута id. Вы можете передать свое значение @Bean только через атрибут name.
Позвольте мне объяснить это на примере:
возьмите этот файл конфигурации, давайте назовем его как spring1.xml
Spring возвращает объект Foo для,
Foo f = (Foo) context.getBean("foo");
. Заменитьid="foo"
наname="foo"
в вышеуказанном spring1.xml, Вы будете видеть один и тот же результат.Определите свою конфигурацию XML как,
Вы получите исключение BeanDefinitionParsingException. Он скажет, что в этом элементе уже используется имя компонента 'fooIdentifier'. Кстати, это то же исключение, которое вы увидите, если у вас ниже config
<bean name = "fooIdentifier" class = "com.intertech.Foo"> </ bean>
<bean name = "fooIdentifier" class = "com. intertech.Foo "> </ bean>
Если вы сохраняете id и name в теге bean-компонента, говорят, что bean-компонент имеет 2 идентификатора. Вы можете получить один и тот же компонент с любым идентификатором. принять конфиг как
следующий код печатает true
источник
Есть ли разница в определении идентификатора и имени в ApplicationContext xml? Нет Начиная с версии 3.1 (весна), идентификатор также определяется как тип xsd: string. Это означает, что любые символы, разрешенные в определении имени, также разрешены в Id. Это было невозможно до весны 3.1.
Зачем использовать имя, когда оно совпадает с Id? Это полезно в некоторых ситуациях, например, позволяя каждому компоненту в приложении ссылаться на общую зависимость, используя имя компонента, специфичное для самого компонента.
источник
И то,
id
и другоеname
- идентификаторы компонентов в контейнере Spring IOC / ApplicationContecxt.id
Атрибут позволяет точно указать один идентификатор , но с использованиемname
атрибута можно указать имя псевдонима для этого компонента.Вы можете проверить весенний документ здесь.
источник