2017-03-02 33 views
0

在Java Spring中,何時使用限定符標記與配置文件標記是否合理? 難道你不能使用任何一個,因爲它們都是有條件的自動編譯?使用其中一種或另一種的好處或成本是什麼?何時使用限定符和配置文件標記

回答

5

@Qualifier:

可能有一種情況,當你創建相同類型的多個bean並希望爲帶有屬性只是其中之一,在這種情況下,你可以使用@Qualifier註解與@Autowired一起通過指定將連線的確切bean來消除混淆。

假設你有兩個彈簧組件類Toyota.class和Bmw.class都實現接口Car.class

@Component 
public class Toyota implements Car 

@Component 
public class Bmw implements Car 

現在如果你想自動裝配汽車的物體,像這樣:

@Autowired 
private Car car; 

春蠶豆,電線,豐田或寶馬會出現混亂?所以spring容器會產生一個錯誤。這就是@Qualifier通過告知容器確切需要連接哪個汽車的實施方案來解決問題的地方。因此,重新定義這樣的代碼:佈線時

@Component 
@Qualifier("toyota") 
public class Toyota implements Car 

@Component 
@Qualifier("bmw") 
public class Bmw implements Car 

@Autowired 
@Qualifier("toyota") 
private Car car; 

現在,Spring容器知道到底是哪一個線,在這種情況下,豐田執行。這就是@Qualifier所做的。

@profile:

@profile允許通過條件來註冊豆。例如,基於在開發,測試,登臺或生產環境中運行的應用程序註冊Bean。

在我們之前的例子中,假設我們想在開發過程中使用豐田實現,在測試過程中使用寶馬。因此,重新定義的代碼如下:

@Component 
@Profile("test") 
public class Toyota implements Car 

@Component 
@Profile("dev") 
public class Bmw implements Car 

@Autowired 
private Car car; 

在這種情況下,我們不需要佈線時指定@Qualifier。 Spring容器將根據運行時配置文件連接正確的實現。

相關問題