Mekanisme suntikan pergantungan musim bunga terutamanya
berdasarkan jenis , bukan nama. Apabila menghadapi pelbagai jenis jenis yang sama (seperti TenantDataSource), ia tidak akan kembali secara automatik untuk dipadankan mengikut nama parameter. Ini kerana Spring tidak boleh selalu menjamin nama parameter dalam kaedah yang sesuai dengan nama kacang.
java secara lalai,tidak akan mengekalkan nama parameter dalam bytecode yang disusun. Sekiranya tidak ada konfigurasi khas, nama parameter (contohnya, TenantAdataSource dan TenantBDataSource) akan dibersihkan semasa kompilasi dan menggantikannya dengan nama sejagat, seperti Arg0 dan Arg1. Oleh itu, musim bunga tidak dapat mengetahui bahawa tenantadataSource merujuk kepada kacang yang dipanggil "Tenanta-Datasource".
menyelesaikan masalah pengekalan nama parameteranda boleh menggunakan logo pengkompil untuk mengekalkan nama parameter dalam kod byte:
-parameters
<code>javac -parameters MyClass.java</code>
Spring mengelakkan andaian untuk mencegah kemalangan. Sebagai contoh, jika nama parameter secara tidak sengaja ditukar atau dinamakan, atau pemaju mengharapkan pemetaan yang berbeza, apa yang akan berlaku? Sekiranya tidak ada panduan yang jelas (seperti
), musim bunga tidak dapat menentukan niat pemaju, dan memilih untuk membuang kesilapan dan bukannya menyuntik kacang yang salah.
@Qualifier
Spring mengikuti prinsip "jelas lebih baik daripada tersembunyi". Suntikan bergantung harus diramalkan, dan tidak bergantung kepada andaian nama parameter kepada pemadanan padanan nama kacang. Spring adalah konsisten dalam persekitaran dan kerangka yang berbeza. Sesetengah bahasa atau kerangka (seperti Kotlin) mengekalkan nama parameter secara lalai, sementara bahasa lain tidak dikekalkan.
Bilakah nama yang boleh dipadankan boleh berfungsi secara automatik?
Walaupun musim bunga tidak sepadan dengan nama parameter secara lalai, ia boleh dipadankan mengikut nama parameter dalam beberapa kes, tetapi ia bergantung pada tetapan anda:
Spring 4.3 Parameter Nama Discover
Jika kod kompilasi logo , apabila terdapat kekaburan, musim bunga dapat menyimpulkan nama kacang dari nama parameter.
Contoh:
-parameters
).
<code>@Autowired public TenantService(TenantDataSource tenantADataSource, TenantDataSource tenantBDataSource) { this.tenantADataSource = tenantADataSource; this.tenantBDataSource = tenantBDataSource; }</code>Kenapa musim bunga lebih cenderung menggunakan @Qualifier?
-parameters
Gunakan untuk memastikan definisi dan menghapuskan kekaburan, supaya kedua -dua pemaju dan kerangka dapat dengan jelas niat. @Qualifier
Dengan cara ini, musim bunga boleh mengetahui dengan tepat kacang mana yang disuntik, tanpa mengira nama parameter atau faktor lain.
musim bunga harus lebih pintar?
Sesetengah orang mungkin berfikir bahawa rangka kerja seperti musim bunga harus lebih pintar, dan nama kacang secara automatik dipadankan dengan nama parameter apabila terdapat kekaburan. Tetapi:
- Keserasian belakang : Secara automatik mengubah tingkah laku ini boleh memusnahkan aplikasi sedia ada yang tidak sepadan dengan nama kacang dan nama parameter. Predictability
- : secara eksplisit menyelesaikan kekaburan (contohnya, melalui ) untuk memastikan pemaju sentiasa tahu kacang mana yang disuntik. Andaian reakable boleh menyebabkan kesukaran dalam debugging, terutamanya dalam aplikasi kompleks yang besar.
@Qualifier
keadaan di tempat sebenar
dalam kebanyakan aplikasi sebenar:
Pemaju menggunakan nama kacang dan nama parameter yang bermakna, tetapi mereka juga lebih suka memilih
- untuk memastikan kejelasan mereka.
-
@Qualifier
untuk adegan berbilang contoh, konfigurasi secara dinamik - atau kaedah berasaskan kilang (contohnya abstractroutaratasorce), bukannya menghubungkan secara manual setiap kacang. mata utama
Spring pertama menyuntik dengan jenis
- : Jika hanya ada satu jenis kacang, musim bunga akan menyuntiknya tanpa sebarang masalah. Sekiranya terdapat banyak kacang jenis yang sama, musim bunga memerlukan petikan tambahan (seperti
- ) untuk menyelesaikan kekaburan.
Nama parameter tidak boleh dipercayai. Walaupun nama parameter (
@Qualifier
) dikekalkan, musim bunga akan mengelakkan pencocokan padanan yang terkenal, kecuali konfigurasi adalah jelas. - Eksplisit adalah lebih baik daripada tersembunyi : Pertimbangan keutamaan musim bunga boleh diramalkan, dan menggalakkan pemaju menggunakan konfigurasi eksplisit (seperti atau
-parameters
) dan bukannya bergantung pada padanan tersembunyi. -
Konsep Reka Bentuk Spring : Kesilapan Misty dapat menghalang kemalangan dan memastikan pemaju sepenuhnya mengawal suntikan pergantungan.
@Qualifier
Atas ialah kandungan terperinci Spring-: Why-Spring-Cannot-Match-by-Name-For-Injection. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Dreamweaver Mac版
Alat pembangunan web visual

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna