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 중 해당 Class의 Spring Bean을 우선적으로 의존성 주입
@Qualifier("스프링빈Class명") :
。 Spring Bean 주입 시 주입할 Spring Bean Class명을 선언하여 해당 명칭의 Spring Bean을 주입하도록하는 어노테이션
▶ @Qualifier은 @Primary보다 더 높은 우선순위를 지님.
。의존객체에 DI가 수행되는 생성자 매개변수에 @Qualifier("스프링빈Class명")을 선언
▶ @Qualifier를 통해 해당 명칭의 Class Type의 Spring 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());
System.out.println(gc2.up());
}
}