Anotasi @Qualifier dalam Spring Boot digunakan untuk menyelesaikan kekaburan apabila anda mempunyai berbilang kacang daripada jenis yang sama tetapi ingin menyuntik kacang tertentu. Ia membantu Spring menentukan kacang yang harus didawai secara automatik apabila wujud beberapa calon.
Berikut ialah semua senario biasa di mana @Qualifier berguna dengan contoh:
Senario 1: Berbilang Kacang Sama Jenis
Anda mungkin mempunyai berbilang kacang daripada jenis yang sama dan anda ingin menyuntik kacang tertentu.
Contoh:
import org.springframework.stereotype.Component; @Component public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component public class Cat implements Animal { @Override public String sound() { return "Meow"; } }
Di sini, kedua-dua Anjing dan Kucing melaksanakan antara muka Haiwan.
Penggunaan @Qualifier:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service public class AnimalService { private final Animal animal; @Autowired public AnimalService(@Qualifier("cat") Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Dalam contoh ini, anotasi @Qualifier("cat") menyatakan bahawa kacang Kucing harus disuntik ke dalam AnimalService. Tanpa @Qualifier, Spring akan mengeluarkan pengecualian kerana kekaburan.
Senario 2: Menggunakan @Qualifier dengan Kacang Utama dan Menengah
Kadangkala, anda mungkin mempunyai satu kacang "utama" dan kacang lain yang kurang kerap digunakan, tetapi anda masih mahu dapat menyuntik kacang tertentu dengan @Kelayakan.
Contoh:
@Component @Primary public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component public class Cat implements Animal { @Override public String sound() { return "Meow"; } }
Anotasi @primary memastikan Anjing disuntik secara lalai. Tetapi anda masih boleh menggunakan @Qualifier untuk menyuntik Kucing.
Penggunaan @Qualifier untuk Mengatasi @primary:
@Service public class AnimalService { private final Animal animal; @Autowired public AnimalService(@Qualifier("cat") Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Dalam kes ini, walaupun Anjing ditandakan sebagai @utama, kacang Kucing disuntik disebabkan oleh anotasi @Qualifier.
Senario 3: @Kelayakan dengan Suntikan Pembina dan Suntikan Medan
@Qualifier boleh digunakan dengan suntikan berasaskan pembina dan berasaskan medan.
Contoh: Suntikan Medan dengan @Qualifier:
@Service public class AnimalService { @Autowired @Qualifier("dog") private Animal animal; public String getAnimalSound() { return animal.sound(); } }
Dalam kes ini, @Qualifier("anjing") memastikan kacang Anjing disuntik ke dalam AnimalService.
Senario 4: @Kelayakan dengan Suntikan Parameter Kaedah
Anda juga boleh menggunakan @Qualifier apabila menyuntik kebergantungan melalui parameter kaedah.
Contoh:
@Service public class AnimalService { private Animal animal; @Autowired public void setAnimal(@Qualifier("dog") Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Di sini, @Qualifier("anjing") memastikan kacang Anjing disuntik melalui kaedah penetap.
Senario 5: @Kelayakan dengan Anotasi Tersuai
Anda boleh membuat kelayakan tersuai untuk mengelakkan pengekodan keras nama kacang, menjadikan kod lebih bersih dan lebih mudah diselenggara.
Contoh: Kelayakan Tersuai:
Buat Kelayakan Tersuai:
import org.springframework.beans.factory.annotation.Qualifier; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Qualifier @Retention(RetentionPolicy.RUNTIME) public @interface DogQualifier { }
Gunakan Kelayakan Tersuai:
@Component @DogQualifier public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component public class Cat implements Animal { @Override public String sound() { return "Meow"; } }
Suntikan Menggunakan Kelayakan Tersuai:
@Service public class AnimalService { private final Animal animal; @Autowired public AnimalService(@DogQualifier Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Dalam contoh ini, @DogQualifier digunakan untuk menentukan kacang yang hendak disuntik, bukannya menggunakan @Qualifier("anjing").
Senario 6: @Qualifier dalam Koleksi
Anda boleh menggunakan @Qualifier apabila autowire koleksi kacang untuk memastikan bahawa hanya kacang tertentu disuntik.
Contoh:
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component @Qualifier("domestic") public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component @Qualifier("domestic") public class Cat implements Animal { @Override public String sound() { return "Meow"; } } @Component public class Lion implements Animal { @Override public String sound() { return "Roar"; } }
Penggunaan dengan Koleksi:
@Service public class AnimalService { private final List<Animal> animals; @Autowired public AnimalService(@Qualifier("domestic") List<Animal> animals) { this.animals = animals; } public void printAnimalSounds() { animals.forEach(animal -> System.out.println(animal.sound())); } }
Dalam contoh ini, hanya kacang Anjing dan Kucing disuntik kerana ia ditandakan dengan @Qualifier("domestik").
Ringkasan:
@Qualifier membantu dalam menyuntik kacang tertentu apabila terdapat berbilang calon daripada jenis yang sama.
Ia digunakan dalam senario seperti suntikan pembina, suntikan medan, suntikan kaedah, kelayakan tersuai dan juga dengan koleksi.
Dengan memahami senario ini, anda boleh menggunakan @Qualifier dengan berkesan untuk menyelesaikan kekaburan dan menguruskan suntikan kacang dalam aplikasi Spring Boot.
Atas ialah kandungan terperinci @Qualifier Annotation Spring Boot Menjelaskan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!