@Qualifier
2023. 5. 30. 15:17ㆍ기술 창고/어노테이션 창고
728x90
SMALL
@Qualifier
Component 로 지정하고 ComponentScan을 통해 Bean 객체들을 생성하고 호출할 때 만약 동일한 객체들이 전부 Component 로 선언되어있다면 에러가 발생합니다.
호출할 때 반드시 단일 Component Bean 객체를 받아와야하기 때문이죠.
그래서 Qualifier는 호출하고자 하는 Component Bean 객체를 특정지어 고정적으로 호출할 수 있게끔 해줍니다.
@Component
@Qualifier("mario") // Qualifier 를 통해 특정지어 component 호출 가능. 하지만 반드시 primary 어노테이션이 존재하는 객체가 존재해야 한다.
public class MarioGame implements GamingConsole{
~ 로직 ~
}
@Component
public class GameRunner {
private GamingConsole gamingConsole;
// 호출하는 쪽에서도 Qulifier를 명시해줌.
public GameRunner(@Qualifier("mario") GamingConsole gamingConsole) {
this.gamingConsole = gamingConsole;
}
public void run(){
System.out.println("게임 실행 : " + gamingConsole);
gamingConsole.up();
gamingConsole.down();
gamingConsole.left();
gamingConsole.right();
}
}
@Component 로 Bean 객체를 지정해주고, @Qulifier("mario") 를 지정해줌으로서 특정 Bean 호출자를 생성해주었습니다.
그리고 호출하는 쪽인 GameRunner 클래스에서 생성자 부분에 @Qualifier("mario") 를 명시함으로서 해당 MarioGame 클래스를 호출합니다.
당연히 MarioGame은 GamingConsole을 구현 상속 받고 있기 때문에 GamingConsole 을 인자값으로 받아서 호출할 수 있습니다.
# 다만 Qualifier를 사용하려면, 여러 동일한 클래스 객체들(GamingConsole을 상속받은 클래스들)이 있는 상태에서 @Primary 어노테이션 그 클래스들 중에 한 클래스에 적용되어있어야 합니다.
728x90
반응형
LIST
'기술 창고 > 어노테이션 창고' 카테고리의 다른 글
@Lazy (0) | 2023.05.30 |
---|---|
@Primary (0) | 2023.05.30 |
@ComponentScan (0) | 2023.05.30 |
@Component (0) | 2023.05.30 |
@Bean (0) | 2022.12.23 |