Rumah >Java >javaTutorial >Spring-: Why-Spring-Cannot-Match-by-Name-For-Injection
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 parameter
-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?
Spring 4.3 Parameter Nama Discover
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
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:
@Qualifier
Pemaju menggunakan nama kacang dan nama parameter yang bermakna, tetapi mereka juga lebih suka memilih
@Qualifier
untuk adegan berbilang contoh, Spring pertama menyuntik dengan jenis
@Qualifier
) dikekalkan, musim bunga akan mengelakkan pencocokan padanan yang terkenal, kecuali konfigurasi adalah jelas. -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!