>  기사  >  Java  >  @Qualifier 주석 스프링 부트 설명

@Qualifier 주석 스프링 부트 설명

Patricia Arquette
Patricia Arquette원래의
2024-09-22 18:17:32957검색

@Qualifier Annotation Spring Boot Explained

Spring Boot의 @Qualifier 주석은 동일한 유형의 Bean이 여러 개 있지만 특정 Bean을 삽입하려는 경우 모호성을 해결하는 데 사용됩니다. 여러 후보가 존재할 때 Spring이 자동 연결되어야 하는 Bean을 결정하는 데 도움이 됩니다.

@Qualifier가 예시와 함께 유용하게 사용되는 일반적인 시나리오는 다음과 같습니다.

시나리오 1: 동일한 유형의 여러 콩

동일한 유형의 원두가 여러 개 있고 특정 원두를 주입하고 싶을 수 있습니다.

예:

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";
    }
}

여기서는 Dog와 Cat 모두 Animal 인터페이스를 구현합니다.

@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();
    }
}

이 예에서 @Qualifier("cat") 주석은 Cat 빈이 AnimalService에 주입되어야 함을 지정합니다. @Qualifier가 없으면 Spring은 모호함으로 인해 예외를 발생시킵니다.

시나리오 2: 기본 및 보조 Bean에 @Qualifier 사용

때때로 하나의 "기본" Bean과 덜 자주 사용되는 다른 Bean이 있을 수 있지만 여전히 @Qualifier를 사용하여 특정 Bean을 주입할 수 있기를 원합니다.

예:

@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";
    }
}

@primary 주석은 Dog가 기본적으로 삽입되도록 보장합니다. 하지만 여전히 @Qualifier를 사용하여 Cat을 주입할 수 있습니다.

@primary를 재정의하기 위한 @Qualifier 사용:

@Service
public class AnimalService {

    private final Animal animal;

    @Autowired
    public AnimalService(@Qualifier("cat") Animal animal) {
        this.animal = animal;
    }

    public String getAnimalSound() {
        return animal.sound();
    }
}

이 경우 Dog가 @primary로 표시되어 있음에도 불구하고 @Qualifier 주석으로 인해 Cat bean이 주입됩니다.

시나리오 3: 생성자 주입과 필드 주입을 사용한 @Qualifier
@Qualifier는 생성자 기반 주입과 필드 기반 주입 모두에 사용할 수 있습니다.

예: @Qualifier를 사용한 필드 주입:

@Service
public class AnimalService {

    @Autowired
    @Qualifier("dog")
    private Animal animal;

    public String getAnimalSound() {
        return animal.sound();
    }
}

이 경우 @Qualifier("dog")는 Dog 빈이 AnimalService에 주입되도록 보장합니다.

시나리오 4: 메소드 매개변수 주입을 사용한 @Qualifier

메서드 매개변수를 통해 종속성을 주입할 때 @Qualifier를 사용할 수도 있습니다.

예:

@Service
public class AnimalService {

    private Animal animal;

    @Autowired
    public void setAnimal(@Qualifier("dog") Animal animal) {
        this.animal = animal;
    }

    public String getAnimalSound() {
        return animal.sound();
    }
}

여기서 @Qualifier("dog")는 setter 메소드를 통해 Dog 빈이 주입되도록 보장합니다.

시나리오 5: 사용자 정의 주석이 포함된 @Qualifier

빈 이름을 하드코딩하지 않도록 사용자 정의 한정자를 생성하여 코드를 더 깔끔하고 유지 관리하기 쉽게 만들 수 있습니다.

예: 사용자 정의 한정자:
사용자 정의 한정자 만들기:

import org.springframework.beans.factory.annotation.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface DogQualifier {
}

맞춤 한정자 적용:

@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";
    }
}

사용자 정의 한정자를 사용하여 삽입:

@Service
public class AnimalService {

    private final Animal animal;

    @Autowired
    public AnimalService(@DogQualifier Animal animal) {
        this.animal = animal;
    }

    public String getAnimalSound() {
        return animal.sound();
    }
}

이 예에서는 @Qualifier("dog")를 사용하는 대신 @DogQualifier를 사용하여 주입할 Bean을 지정했습니다.

시나리오 6: 컬렉션의 @Qualifier

특정 빈만 주입되도록 빈 컬렉션을 자동 연결할 때 @Qualifier를 사용할 수 있습니다.

예:

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";
    }
}

컬렉션과 함께 사용:

@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()));
    }
}

이 예에서는 @Qualifier("domestic")가 표시되어 있으므로 Dog 및 Cat 콩만 주입됩니다.

요약:

@Qualifier는 동일한 유형의 후보가 여러 개 있을 때 특정 Bean을 주입하는 데 도움이 됩니다.

생성자 주입, 필드 주입, 메서드 주입, 사용자 지정 한정자 및 컬렉션과 같은 시나리오에서 사용됩니다.

이러한 시나리오를 이해하면 @Qualifier를 효과적으로 사용하여 모호성을 해결하고 Spring Boot 애플리케이션에서 Bean 주입을 관리할 수 있습니다.

위 내용은 @Qualifier 주석 스프링 부트 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.