2016-11-27 143 views

回答

7

您可以使用@Qualifier和@Autowired。逸岸春天會問你明確選擇,如果不明確的bean類型中發現的豆,在這種情況下,你應該提供資格

例如在以下情況下,必須提供一個限定符

@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註解用於解決自動裝配衝突,當有多個相同類型的bean時。

@Qualifier註釋可用於任何用@Component註解的類或用@Bean註釋的方法。此註釋也可以應用於構造函數參數或方法參數。

例如: -

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

有兩種豆,汽車和自行車實現車輛接口使用@Autowired與@Qualifier註解中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(); 
    } 
}