Hay alguna diferencia entre usar un id atributo y name atributo en un <bean> elemento en una Primavera archivo de configuración?

  • es difícil entrar por las preguntas de este sencillo y respuestas de manera directa y completa. Gran. Gracias!
InformationsquelleAutor | 2009-05-17

5 Comentarios

  1. 129

    De la La primavera de referencia, 3.2.3.1 Nomenclatura De Los Frijoles:

    Cada bean tiene uno o más identificadores (también
    llamados identificadores o nombres; estos
    los términos se refieren a la misma cosa). Estos
    los identificadores deben ser únicos dentro de la
    recipiente de los granos es alojado en. Un
    bean casi siempre tienen sólo uno
    id, pero si un bean tiene más de uno
    id, el extra que puede ser esencialmente
    considera alias.

    Cuando se utiliza de configuración basado en XML
    los metadatos, se utiliza el ‘id’ o ‘nombre’
    atributos para especificar el bean
    identificador(s). El atributo ‘id’
    permite especificar exactamente un id,
    y como es un verdadero elemento XML ID
    atributo, el analizador de XML es capaz de
    hacer algo de validación adicional cuando otros
    referencia de los elementos de la id; como tal,
    es la forma preferida para especificar un bean
    id. Sin embargo, la especificación de XML
    no limitar los caracteres que son
    legal en XML Id. Esto normalmente no es
    una restricción, pero si usted tiene una necesidad
    para utilizar uno de estos especiales XML
    los personajes, o quieren introducir otros
    alias para el frijol, usted también puede o
    en lugar de especificar uno o más bean id,
    separados por una coma (,), punto y coma
    (;) o espacios en blanco en el ‘nombre’
    atributo.

    Así que, básicamente, la id atributo se ajusta a la id XML estándares de atributos, mientras que name es un poco más flexible. Generalmente yo uso name casi exclusivamente. Parece más «Primavera-y».

    • Prefiere utilizar el atributo «name» aunque la Primavera de referencia que usted ha citado recomienda utilizar el atributo «id»? Incluso si prefiere quedarse con «nombre», no es más «la Primavera-y» si la Primavera de referencia sugiere lo contrario 🙂 Este es nitpicky, lo sé 😉
  2. 76

    Desde la Primavera de 3.1 el id atributo es una xsd:string y los permisos de la misma gama de personajes como el name atributo.

    La única diferencia entre un id y un name es que un name puede contener varios alias separados por una coma, punto y coma o un espacio en blanco, mientras que un id debe ser un valor único.

    De la Primavera 3.2 documentación:

    De configuración basado en XML de metadatos, se utiliza el id y/o el nombre de los atributos para especificar el identificador del bean(s). El id de atributo permite especificar exactamente un id. Convencionalmente estos nombres son de tipo alfanumérico (‘myBean’, ‘fooService’, etc), pero puede caracteres especiales. Si desea introducir otro alias para el frijol, también se puede especificar en el nombre del atributo, separados por una coma (,), punto y coma (;), o un espacio en blanco. Como nota histórica, en las versiones anteriores a la Primavera 3.1, el atributo id se escribió como un xsd:ID, el cual limitada de caracteres posibles. Como de 3.1, es ahora xsd:string. Tenga en cuenta que bean id de la unicidad se sigue aplicando por el contenedor, aunque ya no por la de los analizadores XML.

  3. 47

    Uno iba a funcionar. Depende de sus necesidades:

    Si el bean identificador contiene un carácter especial(s) por ejemplo (/viewSummary.html), no se puede permitir que el grano id, porque no es un XML válido de IDENTIFICACIÓN. En tales casos, puede omitir la definición del bean id y suministro de los granos name lugar.

    El name atributo también ayuda en la definición de aliases para tu bean, ya que permite especificar múltiples identificadores para un determinado bean.

    • Y uno más para decirlo en sus propias palabras y dar un ejemplo de por qué los caracteres especiales puede ser necesario.
    • Gracias. Se los agradezco.
  4. 2

    ¿Hay alguna diferencia entre el uso de un atributo id y nombre de atributo en una <bean> etiqueta

    Algunas pequeñas diferencias existe, utilizando el id de lanzar la excepción si no se manejan correctamente .

    permítanme respuesta a la pregunta

    Hay alguna diferencia entre el uso de un id de atributo y el uso de un nombre de atributo en una <bean> etiqueta,

    No hay ninguna diferencia. usted va a experimentar el mismo efecto cuando el id o nombre que se utiliza en una <bean> etiqueta .

    Cómo?

    Tanto id y nombre de los atributos que nos da un medio para proporcionar valor de identificador para un bean (Para este momento, creo que el id de medios de identificación, pero no identifier). En ambos casos, usted verá el mismo resultado si se llama applicationContext.getBean("bean-identifier"); .

    Tome @Bean, el java equivalente de <bean> de la etiqueta, usted no encontrará un atributo id. usted puede dar a su valor de identificador a @Bean sólo a través del nombre del atributo.

    Permítanme explicarlo a través de un ejemplo :


    Tome este archivo de configuración, vamos a llamar como 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>

    Primavera devuelve Foo objeto, Foo f = (Foo) context.getBean("foo");
    . Reemplazar id="foo" con name="foo" en el anterior spring1.xml, Usted todavía va a ver el mismo resultado.

    Definir su configuración xml como,

    <?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>

    Obtendrá BeanDefinitionParsingException. Es decir, Frijol nombre de ‘fooIdentifier’ ya se utiliza en este elemento. Por cierto, Esta es la misma excepción que se va a ver si está por debajo de config

    <bean name=»fooIdentifier» class=»com.intertech.Foo»></bean>

    <bean name=»fooIdentifier» class=»com.intertech.Foo»></bean>


    Si usted mantiene tanto id y el nombre del bean de la etiqueta, el grano se dice que tiene 2 identificadores. usted puede conseguir el mismo bean con cualquier identificador.
    tomar config como

    <?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>

    el siguiente código imprime cierto

    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
  5. 1

    Hay diferencia en la definición de Id & nombre en ApplicationContext xml ? No
    Como de 3.1(de primavera), id también se define como un xsd:string tipo.
    Esto significa que, independientemente de caracteres permitidos en la definición de nombre son permitidos en Id.
    Esto no era posible antes de la Primavera 3.1.

    Por qué utilizar el nombre, cuando es el mismo Id ?
    Es útil para algunas situaciones, tales como permitir que cada componente en una aplicación para referirse a una misma dependencia mediante el uso de un bean nombre que es específica a la que el propio componente.

    For example, the configuration metadata for subsystem A may refer to a DataSource via the name subsystemA-dataSource. The configuration metadata for subsystem B may refer to a DataSource via the name subsystemB-dataSource. When composing the main application that uses both these subsystems the main application refers to the DataSource via the name myApp-dataSource. To have all three names refer to the same object you add to the MyApp configuration metadata the following 
    
    <bean id="myApp-dataSource" name="subsystemA-dataSource,subsystemB-dataSource" ..../>
    
    Alternatively, You can have separate xml configuration files for each sub-system and then you can make use of
    alias to define your own names.
    
    <alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
    <alias name="subsystemA-dataSource" alias="myApp-dataSource" />

Dejar respuesta

Please enter your comment!
Please enter your name here