2016-11-27 3 views

답변

7

@Autowired와 함께 @Qualifier를 사용할 수 있습니다. 가리키고 봄은 명시 적으로이 규정자가에게

@Component 
@Qualifier("staff") 
public Staff implements Person {} 

@Component 
@Qualifier("employee") 
public Manager implements Person {} 


@Component 
public Payroll { 

    private Person person; 

    @Autowired 
    public Payroll(@Qualifier("employee") Person person){ 
      this.person = person; 
    } 

} 
1

@Qualifier 주석을 제공 할 필요가있다 당신이 경우 다음의 예를 들어 규정

를 제공해야하는 경우 모호한 빈 유형이 발견되면 빈을 선택 요청합니다 동일한 유형의 빈이 여러 개인 경우 자동 와이어 링 충돌을 해결하는 데 사용됩니다.

@Qualifier 주석은 @Component로 주석 된 모든 클래스 또는 @Bean으로 주석 된 메소드에서 사용할 수 있습니다. 이 주석은 생성자 인수 또는 메서드 매개 변수에도 적용 할 수 있습니다.

예 : -

public interface Vehicle { 
    public void start(); 
    public void stop(); 
} 

두 콩, 자동차와 자전거는 차량 인터페이스를 @Qualifier 주석 @Autowired를 사용 VehicleService에

@Component(value="car") 
public class Car implements Vehicle { 

    @Override 
    public void start() { 
      System.out.println("Car started"); 
    } 

    @Override 
    public void stop() { 
      System.out.println("Car stopped"); 
    } 

} 

@Component(value="bike") 
public class Bike implements Vehicle { 

    @Override 
    public void start() { 
      System.out.println("Bike started"); 
    } 

    @Override 
    public void stop() { 
      System.out.println("Bike stopped"); 
    } 

} 

주입 자전거 빈을 구현하고 있습니다. @Qualifier를 사용하지 않으면 NoUniqueBeanDefinitionException이 발생합니다.

@Component 
public class VehicleService { 

    @Autowired 
    @Qualifier("bike") 
    private Vehicle vehicle; 

    public void service() { 
     vehicle.start(); 
     vehicle.stop(); 
    } 
} 
관련 문제