Gibt es einen Unterschied zwischen der Verwendung eines id
Attributs und eines name
Attributs für ein <bean>
Element in einer Spring-Konfigurationsdatei?
spring
configuration
Duncan Jones
quelle
quelle
Antworten:
Aus der Spring-Referenz , 3.2.3.1 Benennen von Bohnen :
Grundsätzlich
id
entspricht das Attribut den XML-ID-Attributstandards,name
ist jedoch etwas flexibler. Generell benutze ich soname
ziemlich ausschließlich. Es scheint nur mehr "Spring-y".quelle
Seit Spring 3.1 ist das
id
Attribut einxsd:string
und erlaubt den gleichen Zeichenbereich wie dasname
Attribut.Der einzige Unterschied zwischen a
id
und aname
besteht darin, dass aname
mehrere Aliase enthalten kann, die durch Komma, Semikolon oder Leerzeichen getrennt sind, während anid
einzelner Wert sein muss.Aus der Spring 3.2-Dokumentation:
quelle
Entweder würde man arbeiten. Dies hängt von Ihren Anforderungen ab:
Wenn Ihre Bean- ID beispielsweise Sonderzeichen enthält
/viewSummary.html
, wird sie nicht als Bean zugelassenid
, da es sich nicht um eine gültige XML-ID handelt. In solchen Fällen können Sie die Definition der Bean überspringenid
undname
stattdessen die Bean bereitstellen .Das
name
Attribut hilft auch beim Definieren vonalias
es für Ihre Bean, da es die Angabe mehrerer Bezeichner für eine bestimmte Bean ermöglicht.quelle
Es gibt nur wenige geringfügige Unterschiede: Wenn die ID verwendet wird, wird eine Ausnahme ausgelöst, wenn sie nicht ordnungsgemäß behandelt wird.
Lassen Sie mich die folgende Frage beantworten
Es gibt keinen Unterschied. Der gleiche Effekt tritt auf, wenn ID oder Name für ein <bean> -Tag verwendet werden.
Wie?
Sowohl ID- als auch Namensattribute geben uns die Möglichkeit, einer Bean einen Bezeichnerwert bereitzustellen (In diesem Moment bedeutet denken, dass ID ID, aber kein Bezeichner bedeutet). In beiden Fällen sehen Sie das gleiche Ergebnis, wenn Sie anrufen
applicationContext.getBean("bean-identifier");
.Nehmen Sie @Bean, das Java-Äquivalent des <bean> -Tags. Sie werden kein ID-Attribut finden. Sie können @Bean Ihren Bezeichnerwert nur über das Namensattribut geben.
Lassen Sie es mich
anhand eines Beispiels erklären: Nehmen Sie diese Konfigurationsdatei und nennen Sie sie spring1.xml
Spring gibt das Foo-Objekt für ,
Foo f = (Foo) context.getBean("foo");
. Ersetzen Sieid="foo"
durchname="foo"
in der obigen Datei spring1.xml. Sie werden immer noch das gleiche Ergebnis sehen.Definieren Sie Ihre XML-Konfiguration wie folgt:
Sie erhalten die BeanDefinitionParsingException. In diesem Element wird bereits der Bean-Name 'fooIdentifier' verwendet. Dies ist übrigens dieselbe Ausnahme, die Sie sehen werden, wenn Sie unten config
<bean name = "fooIdentifier" class = "com.intertech.Foo"> </ bean>
<bean name = "fooIdentifier" class = "com haben. intertech.Foo "> </ bean>
Wenn Sie sowohl die ID als auch den Namen für das Bean-Tag beibehalten, hat die Bean zwei Bezeichner. Sie können dieselbe Bean mit jeder Kennung erhalten. Nehmen Sie config as
Der folgende Code gibt true aus
quelle
Gibt es einen Unterschied bei der Definition von ID und Name in ApplicationContext xml? Nein Ab 3.1 (spring) wird id auch als xsd: string-Typ definiert. Dies bedeutet, dass alle Zeichen, die zum Definieren des Namens zulässig sind, auch in der ID zulässig sind. Dies war vor Frühjahr 3.1 nicht möglich.
Warum sollte der Name verwendet werden, wenn er mit der ID identisch ist? Dies ist in einigen Situationen hilfreich, z. B. wenn Sie zulassen, dass jede Komponente in einer Anwendung auf eine allgemeine Abhängigkeit verweist, indem Sie einen Bean-Namen verwenden, der für diese Komponente selbst spezifisch ist.
quelle
Beide
id
undname
sind Bean-IDs im Spring IOC-Container / ApplicationContecxt. Mit demid
Attribut können Sie genau eine ID angeben, aber mit demname
Attribut können Sie dieser Bean einen Aliasnamen geben.Sie können die Feder überprüfen doc hier.
quelle