Apakah ada perbedaan antara menggunakan id
atribut dan name
atribut pada a<bean>
elemen dalam file konfigurasi Spring?
Apakah ada perbedaan antara menggunakan id
atribut dan name
atribut pada a<bean>
elemen dalam file konfigurasi Spring?
Jawaban:
Dari referensi Spring , 3.2.3.1 Kacang Penamaan :
Setiap kacang memiliki satu id atau lebih (juga disebut pengidentifikasi, atau nama; istilah ini merujuk pada hal yang sama). Id ini harus unik di dalam wadah yang menampung kacang. Kacang hampir selalu hanya memiliki satu id, tetapi jika kacang memiliki lebih dari satu id, yang ekstra pada dasarnya dapat dianggap sebagai alias.
Saat menggunakan metadata konfigurasi berbasis XML, Anda menggunakan atribut 'id' atau 'name' untuk menentukan pengenal kacang. Atribut 'id' memungkinkan Anda untuk menentukan secara tepat satu id, dan karena itu adalah atribut ID elemen XML nyata, parser XML dapat melakukan beberapa validasi tambahan ketika elemen lain mereferensikan id; dengan demikian, ini adalah cara yang disukai untuk menentukan id kacang. Namun, spesifikasi XML memang membatasi karakter yang sah dalam ID XML. Ini biasanya bukan kendala, tetapi jika Anda harus menggunakan salah satu karakter XML khusus ini, atau ingin memperkenalkan alias lain ke kacang, Anda juga dapat atau sebaliknya menetapkan satu atau lebih id kacang, dipisahkan dengan koma (, ), titik koma (;), atau spasi putih di atribut 'nama'.
Jadi pada dasarnya id
atribut sesuai dengan standar atribut XML id sedangkan name
sedikit lebih fleksibel. Secara umum, saya menggunakan name
cukup banyak secara eksklusif. Sepertinya lebih "Spring-y".
Sejak Spring 3.1 id
atribut adalah xsd:string
dan memungkinkan rentang karakter yang sama dengan name
atribut.
Satu-satunya perbedaan antara a id
dan a name
adalah bahwa a name
dapat berisi beberapa alias yang dipisahkan oleh koma, titik koma, atau spasi putih, sedangkan a id
harus berupa nilai tunggal.
Dari dokumentasi Spring 3.2:
Dalam metadata konfigurasi berbasis XML, Anda menggunakan atribut id dan / atau nama untuk menentukan pengenal kacang. Atribut id memungkinkan Anda menentukan secara tepat satu id. Secara konvensional nama-nama ini adalah alfanumerik ('myBean', 'fooService', dll), tetapi mungkin karakter khusus juga. Jika Anda ingin mengenalkan alias lain ke kacang, Anda juga bisa menentukannya di atribut nama, dipisahkan dengan koma (,), titik koma (;), atau spasi putih. Sebagai catatan historis, dalam versi sebelum Spring 3.1, atribut id diketik sebagai xsd: ID, yang membatasi karakter yang mungkin. Pada 3.1, sekarang xsd: string. Perhatikan bahwa keunikan id kacang masih diberlakukan oleh wadah, meskipun tidak lagi oleh parser XML.
Salah satu akan bekerja. Itu tergantung pada kebutuhan Anda:
Jika pengenal kacang Anda mengandung karakter khusus misalnya ( /viewSummary.html
), itu tidak akan diizinkan sebagai kacang id
, karena itu bukan ID XML yang valid. Dalam kasus seperti itu, Anda bisa melewatkan mendefinisikan kacang id
dan memasok kacang name
sebagai gantinya.
The name
atribut juga membantu dalam mendefinisikan alias
es untuk kacang Anda, karena memungkinkan menentukan beberapa pengidentifikasi untuk kacang yang diberikan.
Apakah ada perbedaan antara menggunakan atribut id dan atribut nama pada tag <bean>
Beberapa perbedaan kecil ada seperti, menggunakan id akan membuang pengecualian jika tidak ditangani dengan benar.
izinkan saya menjawab pertanyaan di bawah ini
Apakah ada perbedaan antara menggunakan atribut id dan menggunakan atribut nama pada tag <bean>,
Tidak ada perbedaan. Anda akan mengalami efek yang sama ketika id atau nama digunakan pada tag <bean>.
Bagaimana?
Atribut id dan nama memberi kita sarana untuk memberikan nilai pengenal kepada kacang (Untuk saat ini, pikirkan id berarti id tetapi bukan pengidentifikasi). Dalam kedua kasus, Anda akan melihat hasil yang sama jika Anda meneleponapplicationContext.getBean("bean-identifier");
.
Ambil @Bean, tag java yang setara dengan <bean>, Anda tidak akan menemukan atribut id. Anda dapat memberikan nilai pengenal Anda ke @Bean hanya melalui atribut nama.
Biarkan saya menjelaskannya melalui contoh:
Ambil file konfigurasi ini, sebut saja sebagai 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 mengembalikan objek Foo untuk Foo f = (Foo) context.getBean("foo");
,. Ganti id="foo"
denganname="foo"
di spring1.xml di atas, Anda masih akan melihat hasil yang sama.
Tentukan konfigurasi xml Anda seperti,
<?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>
Anda akan mendapatkan BeanDefinitionParsingException. Itu akan mengatakan, nama Bean 'fooIdentifier' sudah digunakan dalam elemen ini. Ngomong-ngomong, ini adalah pengecualian yang sama yang akan Anda lihat jika Anda memiliki konfigurasi
<bean name = "fooIdentifier" class = "com.intertech.Foo"> </bean>
<bean > = bean name = "fooIdentifier" class = "com. intertech.Foo "> </bean>
Jika Anda menyimpan id dan nama pada tag bean, bean dikatakan memiliki 2 pengidentifikasi. Anda bisa mendapatkan kacang yang sama dengan pengenal apa pun. ambil config sebagai
<?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>
kode berikut ini mencetak 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
Apakah ada perbedaan dalam mendefinisikan Id & nama dalam ApplicationContext xml? No As 3.1 (spring), id juga didefinisikan sebagai xsd: tipe string. Itu berarti karakter apa pun yang diizinkan dalam mendefinisikan nama juga diizinkan dalam Id. Ini tidak mungkin dilakukan sebelum Musim Semi 3.1.
Mengapa menggunakan nama saat sama dengan Id? Ini berguna untuk beberapa situasi, seperti memungkinkan setiap komponen dalam aplikasi untuk merujuk pada ketergantungan umum dengan menggunakan nama kacang yang khusus untuk komponen itu sendiri.
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" />
Keduanya id
dan name
merupakan pengidentifikasi kacang dalam wadah Spring IOC / ApplicationContecxt. The id
atribut memungkinkan Anda menentukan tepat satu id tetapi menggunakanname
atribut Anda dapat memberikan nama alias untuk kacang itu.
Anda dapat memeriksa dokumen pegas di sini.