2016-02-05 26 views
1

考慮代碼:可以用不同的參數化彈出兩次樣品豆嗎?

public class MyProcessor<T extends GenericData> implements ProcessorInterface<T> { 

    @Autowired 
    private List<SomeCriteria<T>> criterias; 

    @Override 
    public long calculate(T data) { 
     long result = 0; 
     for (SomeCriteria c : criterias) { 
      result += c.calculate(data);       
     } 
     return long;   
    } 
} 

因此,只有在SomeCriteria實施和GenericData的差異。例如。一個GenericData有幾個 SomeCriteria。因此,如果有3 GenericData,纔有可能寫出像這樣的代碼:

public DataService { 
    @Autowire 
    private MyProcessor<DataOne> processorOne; 
    @Autowire 
    private MyProcessor<DataTwo> processorTwo; 
    @Autowire 
    private MyProcessor<DataThree> processorThree; 
} 

不必每次都寫實施處理器?

回答

1

您可以使用@Qualifier註釋來創建多個相同類型的bean。我希望這會對你有所幫助。

public DataService { 
    @Qualifier 
    private MyProcessor<DataOne> processorOne; 
    @Qualifier 
    private MyProcessor<DataTwo> processorTwo; 
    } 
+0

沒有必要使用'@ Qualifier'註釋來獲得通用支持,請參閱我的答案(或者最好閱讀關於[Spring Framework 4.0和Java泛型]的博客文章(https://spring.io/blog/) 2013/12/03/spring-framework-4-0-and-java-generics) – matsev

2

是的,這是可能的。由於Spring 4.0中,你可以做這樣的東西

@Autowired 
private Store<String> s1; // Injects the stringStore bean 

@Autowired 
private Store<Integer> s2; // Injects the integerStore bean 

以上從Spring Framework 4.0 and Java Generics博客文章由Phil Webb在Spring網站複製的例子。請閱讀它的更多細節。

+0

我看到了,但是如果Store 有類似於Item 的依賴關係,Spring會將Store Item注入Item中autowired like'@Autowired Store '? – Cherry

相關問題