Existe-t-il une différence entre l'utilisation d'un id
attribut et l' name
attribut sur un <bean>
élément dans un fichier de configuration Spring?
spring
configuration
Duncan Jones
la source
la source
Réponses:
D'après la référence Spring , 3.2.3.1 Nommage des beans :
Donc, fondamentalement, l'
id
attribut est conforme aux normes d'attribut XML id alors qu'ilname
est un peu plus flexible. D'une manière générale, j'utilise àname
peu près exclusivement. Cela semble plus "Spring-y".la source
Depuis Spring 3.1, l'
id
attribut est unxsd:string
et autorise la même plage de caractères que l'name
attribut.La seule différence entre an
id
et aname
est que aname
peut contenir plusieurs alias séparés par une virgule, un point-virgule ou un espace, tandis que anid
doit être une valeur unique.À partir de la documentation de Spring 3.2:
la source
L'un ou l'autre fonctionnerait. Cela dépend de vos besoins:
si votre identifiant de bean contient des caractères spéciaux, par exemple (
/viewSummary.html
), il ne sera pas autorisé en tant que beanid
, car ce n'est pas un ID XML valide. Dans de tels cas, vous pouvez ignorer la définition du beanid
et fournir le bean à laname
place.L'
name
attribut aide également à définiralias
es pour votre bean, car il permet de spécifier plusieurs identifiants pour un bean donné.la source
Il existe peu de différences mineures, comme l'utilisation de id lèvera une exception s'il n'est pas géré correctement.
permettez-moi de répondre à la question ci-dessous
Il n'y a pas de différence. vous ressentirez le même effet lorsque id ou nom est utilisé sur une balise <bean>.
Comment?
Les attributs id et name nous donnent tous deux un moyen de fournir une valeur d'identifiant à un bean (pour l'instant, pensez que id signifie id mais pas identifiant). Dans les deux cas, vous verrez le même résultat si vous appelez
applicationContext.getBean("bean-identifier");
.Prenez @Bean, l'équivalent java de la balise <bean>, vous ne trouverez pas d'attribut id. vous pouvez donner votre valeur d'identifiant à @Bean uniquement via l'attribut name.
Permettez-moi de l'expliquer à travers un exemple:
Prenez ce fichier de configuration, appelons-le comme spring1.xml
Retourne Spring objet Foo pour,
Foo f = (Foo) context.getBean("foo");
. Remplacezid="foo"
parname="foo"
dans le print1.xml ci-dessus, vous verrez toujours le même résultat.Définissez votre configuration xml comme,
Vous obtiendrez BeanDefinitionParsingException. Il dira que le nom du bean 'fooIdentifier' est déjà utilisé dans cet élément. Par ailleurs, c'est la même exception que vous verrez si vous avez ci-dessous la configuration
<bean name = "fooIdentifier" class = "com.intertech.Foo"> </bean>
<bean name = "fooIdentifier" class = "com. intertech.Foo "> </bean>
Si vous conservez à la fois l'identifiant et le nom dans la balise du bean, le bean aurait 2 identifiants. vous pouvez obtenir le même bean avec n'importe quel identifiant. prenez config comme
le code suivant s'imprime vrai
la source
Existe-t-il une différence dans la définition de l'identifiant et du nom dans le fichier XML ApplicationContext? Non Depuis la version 3.1 (spring), id est également défini comme un type de chaîne xsd :. Cela signifie que tous les caractères autorisés dans la définition du nom sont également autorisés dans Id. Cela n'était pas possible avant le printemps 3.1.
Pourquoi utiliser le nom quand il est identique à l'ID? Il est utile dans certaines situations, comme autoriser chaque composant d'une application à faire référence à une dépendance commune en utilisant un nom de bean spécifique à ce composant lui-même.
la source
Les deux
id
etname
sont des identificateurs de bean dans le conteneur Spring IOC / ApplicationContecxt. L'id
attribut vous permet de spécifier exactement un identifiant mais en utilisant l'name
attribut, vous pouvez donner un nom d'alias à ce bean.Vous pouvez consulter la doc du printemps ici.
la source