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!

Javaachievesplatformindependencethroughthejavavirtualmachine (JVM), membenarkancodetorunondifferentoperatingsystemswithoutmodification.thejvmcompilesjavacodeintoplatform-bebastbytecode, yang mana-mana

Javaispowerfulduetoitsplatformindantrectence, orientednature orientednature, richstandardlibrary, perfanksapabilities, andstrongSecurityfeatures.1) PlatformIndendenceAllowsApplicationStorAnanydeviceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceDeviceViceDeviceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceViceD

Fungsi Java teratas termasuk: 1) pengaturcaraan berorientasikan objek, menyokong polimorfisme, meningkatkan fleksibiliti kod dan pemeliharaan; 2) mekanisme pengendalian pengecualian, meningkatkan keteguhan kod melalui blok percubaan-catch-finally; 3) pengumpulan sampah, memudahkan pengurusan memori; 4) generik, meningkatkan keselamatan jenis; 5) Ekspresi AMBDA dan pengaturcaraan berfungsi untuk menjadikan kod lebih ringkas dan ekspresif; 6) Perpustakaan standard yang kaya, menyediakan struktur data dan algoritma yang dioptimumkan.

Javaisnotentirelyplatformindependentduetojvmvariationsandnativecodeintegration, butitlargelyupholdsitsworapromise.1) javacompil estobytecoderunbythejvm, membolehkanCross-platformexecution.2) Walau bagaimanapun, setiap satuplatformrequiresaspecificjvm, dandifferencesinjvmimpleme

Thjavavirtualmachine (jvm) isanabstractcomputingmachinecrucialforjavaexecutionasitrunsjavabytecode, enablingthe "writeonce, rayanywhere" kemampuan.TheJvm'skeycomponentlude: 1)

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)

Javaisgreatduetoitsplatformindantrect, robustoopsupport, extensivelibraries, andstrongcommunity.1) platformindependenceviajvmallowscodetorunonvariousplatforms.2)

Lima ciri utama Java adalah polimorfisme, ekspresi lambda, streamsapi, generik dan pengendalian pengecualian. 1. Polimorfisme membolehkan objek kelas yang berbeza digunakan sebagai objek kelas asas biasa. 2. Ekspresi Lambda menjadikan kod lebih ringkas, terutama sesuai untuk mengendalikan koleksi dan aliran. 3.StreamsAPI dengan cekap memproses set data yang besar dan menyokong operasi deklaratif. 4. Generik menyediakan jenis keselamatan dan kebolehgunaan semula, dan kesilapan jenis ditangkap semasa penyusunan. 5. Pengendalian Pengecualian membantu mengendalikan kesilapan dengan elegan dan menulis perisian yang boleh dipercayai.


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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dreamweaver CS6
Alat pembangunan web visual

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular
