![](/img/trans.png)
[英]What is the difference between loading properties files in spring through @propertysource annotation and by using PropertySourcesHolderConfigure 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.