Rumah  >  Artikel  >  Java  >  @Qualifier Annotation Spring Boot Menjelaskan

@Qualifier Annotation Spring Boot Menjelaskan

Patricia Arquette
Patricia Arquetteasal
2024-09-22 18:17:32970semak imbas

@Qualifier Annotation Spring Boot Explained

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn