2011-07-25 129 views
1

我有一個春天的問題。我用基於註釋的配置替換基於xml文件的spring配置。正因爲如此,我遇到了以下問題。 Theres是一個類,其中一個字段由基於類的自動裝配配置。從那時起,只有一個候選人。但是現在有更多的候選人,因爲我已經添加了@Named標籤來爲相同接口的多個類添加多個標籤。Java彈簧註解問題

下面是一個代碼示例: 與自動裝配字段的類:

public class AutowiringClass<X, Y> { 
    // This is the field which is autowired 
    private Autowired<X, Y> bean; 
    ..... 
} 

然後有一個第二類,這與特定的通用參數延伸AutoWiringClass:

public class TestClass extends AutoWiringClass<ObjectX, ObjectY> { 
    ..... 
} 

存在的問題是那個彈簧不知道應該使用哪個類,因爲類型自動裝配的類不止一次,而且具有不同的泛型類型(ObjectX,ObjectY)。我想,這不同的泛型類型會做的事..但他們不:( 這將是真棒,如果任何人有,一個解決方案。

回答

0

泛型不會幫你因類型擦除 ,Spring對此無能爲力,但你可以使用@Primary註釋來表示應該總是使用的默認實現,或者按名稱而不是按類型切換到自動裝配,然後當有疑問時,Spring將使用字段名稱

3

Qualifiers是你正在尋找的東西當你註冊一個類作爲Spring bean(使用@Component之類)時,你可以傳遞一個名字作爲參數,然後當你自動裝配一個屬性,添加一個@Qualifier註釋與該bean的名稱。所以:

@Component("Test1") 
public class Test { } 
@Component("Test2") 
public class BetterTest extends Test {} 

public class TestUser { 
    @Autowired 
    @Qualifier("Test1") 
    private Test test; 
} 
+0

沒有多數民衆贊成我不是在找。對不起,我應該提到那個,但我是forogt。問題是,有多個TestClasses擴展了AutoWiringClass。但是在這個TestClass中,AutoWiringClass的泛型是不同的,但是Java並沒有注意到它:(將來會有新的TestClass,但TestClass的程序員不應該關心設置關於Qualifier的變量,我希望有一種方法可以實現這一點。 – itsme