Есть ли разница между использованием атрибута id и атрибута name в теге
Существует несколько незначительных различий, например, использование id вызовет исключение, если не обрабатывается должным образом.
позвольте мне ответить на вопрос ниже
Есть ли разница между с использованием атрибута id и с использованием атрибута name в теге ,
Нет никакой разницы. Вы будете испытывать тот же эффект, когда идентификатор или имя используется в теге .
Как?
И атрибуты id, и name дают нам возможность предоставить идентификатор для конкретного компонента (на данный момент, думаю, id означает id, но не как идентификатор). Вы можете выбрать любой атрибут для предоставления значения идентификатора. В обоих случаях вы увидите один и тот же результат, если позвоните applicationContext.getBean("bean-identifier");
.
Возьмите @Bean, java-эквивалент тега , атрибут id отсутствует. Вы можете указать значение идентификатора только через атрибут name.
Позвольте мне объяснить это на примере, рассмотрим следующий код для получения компонента,
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(...);
Foo f = (Foo) context.getBean("foo")// returns Foo object;
Если конфигурация указана как
spring1.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="foo" class="com.intertech.Foo"></bean>
<bean id="bar" class="com.intertech.Bar"></bean>
</beans>
Spring возвращает объект Foo для, Foo f = (Foo) context.getBean("foo");
заменить id="foo"
на name="foo"
в указанном выше spring1.xml
Вы все еще можете увидеть тот же результат,
Spring возвращает объект Foo для, Foo f = (Foo) context.getBean("foo");
Определите свою конфигурацию XML как,
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="fooIdentifier" class="com.intertech.Foo"></bean>
<bean name="fooIdentifier" class="com.intertech.Foo"></bean>
</beans>
Вы получите BeanDefinitionParsingException, в котором будет сказано, что в этом элементе уже используется имя компонента 'fooIdentifier'.
Такое же исключение будет выдано, если
передается в качестве конфигурации
если вы сохраните и идентификатор, и имя в теге bean, говорят, что bean имеет 2 идентификатора, вы можете получить один и тот же bean с любым идентификатором.
принять конфиг как
<?xml version="1.0" encoding="UTF-8"?><br>
<beans ...>
<bean id="fooById" name="fooByName" class="com.intertech.Foo"></bean>
<bean id="bar" class="com.intertech.Bar"></bean>
</beans>
следующий код выводит true
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(...);
Foo fooById = (Foo) context.getBean("fooById")// returns Foo object;
Foo fooByName = (Foo) context.getBean("fooByName")// returns Foo object;
System.out.println(fooById == fooByName) //true