DI 관련 - @Autowired, @Primary, @Qualifier

이정수·2025년 10월 15일

Spring

목록 보기
8/18

Dependency Injection 관련 어노테이션
@Autowired, @Primary, @Qualifier

  • @Autowired :
    의존성 주입을 수행하는 어노테이션
    Spring Context에서 해당 의존객체Class Type에 해당하는 Spring Bean을 자동으로 선언된 Field, Setter주입 방식에 따라 의존성 주입을 수행

    클래스생성자가 단 하나만 존재해야 @Autowired를 생략가능
    클래스생성자가 많은 경우 @Autowired를 명시적으로 선언
@Autowired
Dependency1 dependency1;
  • @Primary :
    Spring Bean으로 등록되고 동일한 Class or Interface를 상속받은 클래스 중 우선적으로 의존성 주입을 수행할 클래스에 선언하여 우선권을 부여하는 어노테이션
    Candidate Bean 중 해당 ClassSpring Bean을 우선적으로 의존성 주입

  • @Qualifier("스프링빈Class명") :
    Spring Bean 주입 시 주입할 Spring Bean Class명을 선언하여 해당 명칭의 Spring Bean주입하도록하는 어노테이션
    @Qualifier@Primary보다 더 높은 우선순위를 지님.

    의존객체DI가 수행되는 생성자 매개변수@Qualifier("스프링빈Class명")을 선언
    @Qualifier를 통해 해당 명칭의 Class TypeSpring Bean이 자동으로 주입
    Spring Bean을 정의하는 Class에도 추가적으로 정의 시 클래스명이 아닌 사용자 정의 명칭으로도 설정이 가능
@Component
@Primary
class MarioGame implements GamingConsole{
    public String up(){
        return "Mario goes upside";
    }
}
@Component
@Qualifier("wjdtn")
class SuperContraGame implements GamingConsole{
    public String up(){
        return "Character goes upside";
    }
}
@Component
class Runner {
    private final GamingConsole gc1;
    private final GamingConsole gc2;
    public Runner(GamingConsole gc1 , @Qualifier("wjdtn") GamingConsole gc2){
        this.gc1 = gc1;
        this.gc2 = gc2;
    }
    public void run(){
        System.out.println(gc1.up()); // Mario goes upside
        System.out.println(gc2.up()); // Character goes upside
    }
}
   
profile
공부기록 블로그

0개의 댓글