簡體   English   中英

使用@Qualifier批注和在Spring中直接注入bean有什么區別?

[英]What is the difference between using @Qualifier annotation and directly injecting bean in spring?

假設我有一個程序

@Component
public interface Coach{
  public String giveCoaching();
}

@Component
public TennisCoach implements Coach{
  @Override
  public String giveCoaching(){
    return "Teaching forhand";
  }
}

我有兩個Demo類,以不同的方式注入了bean。 兩次注射有什么區別

public class AppDemo{
  @AutoWired
  @Qualifier("tennisCoach")
  private Coach theCoach;
}

public class AppDemo{
  @AutoWired
  private TennisCoach tennisCoach;
  }
}

如果您的接口有多個實現,則在自動裝配Bean時會出現異常。 屆時,@ @Qualifier將用於選擇所需的實現

@Component
public interface Coach{
  public String giveCoaching();
}

@Component
public TennisCoach implements Coach{
  @Override
  public String giveCoaching(){
    return "Teaching forhand";
  }
}

@Component
public CricketCoach implements Coach{
  @Override
  public String giveCoaching(){
    return "Teaching forbat";
  }
}

現在,當您如下所示自動連接Coach接口時,就會出現歧義

public class AppDemo{
  @AutoWired      
  private Coach theCoach;
}

因此,您必須為Coach接口定義合適的bean,如下所示。

public class AppDemo{
  @AutoWired
  @Qualifier("tennisCoach")      
  private Coach theCoach;
}

或者,您可以在任何一種實現的頂部使用@Primary批注,以便在默認情況下,如果一個接口的實現有多個,則Spring Container將選擇Bean。

但是在下面的代碼中,您將直接為實現而不是接口創建對象。

public class AppDemo{
  @AutoWired
  private TennisCoach tennisCoach;
  }
}

當接口具有多個實現類時,將使用@Qualifier批注。您應該選擇要在Spring上下文中作為bean注入的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM