Apakah ada perbedaan antara menggunakan id
atribut dan name
atribut pada a<bean>
elemen dalam file konfigurasi Spring?
spring
configuration
Duncan Jones
sumber
sumber
Jawaban:
Dari referensi Spring , 3.2.3.1 Kacang Penamaan :
Jadi pada dasarnya
id
atribut sesuai dengan standar atribut XML id sedangkanname
sedikit lebih fleksibel. Secara umum, saya menggunakanname
cukup banyak secara eksklusif. Sepertinya lebih "Spring-y".sumber
Sejak Spring 3.1
id
atribut adalahxsd:string
dan memungkinkan rentang karakter yang sama denganname
atribut.Satu-satunya perbedaan antara a
id
dan aname
adalah bahwa aname
dapat berisi beberapa alias yang dipisahkan oleh koma, titik koma, atau spasi putih, sedangkan aid
harus berupa nilai tunggal.Dari dokumentasi Spring 3.2:
sumber
Salah satu akan bekerja. Itu tergantung pada kebutuhan Anda:
Jika pengenal kacang Anda mengandung karakter khusus misalnya (
/viewSummary.html
), itu tidak akan diizinkan sebagai kacangid
, karena itu bukan ID XML yang valid. Dalam kasus seperti itu, Anda bisa melewatkan mendefinisikan kacangid
dan memasok kacangname
sebagai gantinya.The
name
atribut juga membantu dalam mendefinisikanalias
es untuk kacang Anda, karena memungkinkan menentukan beberapa pengidentifikasi untuk kacang yang diberikan.sumber
Beberapa perbedaan kecil ada seperti, menggunakan id akan membuang pengecualian jika tidak ditangani dengan benar.
izinkan saya menjawab pertanyaan di bawah ini
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 menelepon
applicationContext.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
Spring mengembalikan objek Foo untuk
Foo f = (Foo) context.getBean("foo");
,. Gantiid="foo"
denganname="foo"
di spring1.xml di atas, Anda masih akan melihat hasil yang sama.Tentukan konfigurasi xml Anda seperti,
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
kode berikut ini mencetak true
sumber
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.
sumber
Keduanya
id
danname
merupakan pengidentifikasi kacang dalam wadah Spring IOC / ApplicationContecxt. Theid
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.
sumber