2012-07-04 58 views
8

我在Spring中有兩個組件服務有點麻煩。Spring沒有類型的唯一bean

我有這個組件:

@Component 
public class SmartCardWrapper 

這一個:

@Component 
public class DummySmartCardWrapper extends SmartCardWrapper 

服務自動裝配,但都失敗春季由於此厚望:爲什麼它不

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.cinebot.smartcard.SmartCardWrapper] is defined: expected single matching bean but found 2: [dummySmartCardWrapper, smartCardWrapper] 

使用類名?

+0

嗨託比亞,似乎你應該使用註釋@Qualifier,檢查出的鏈接:http://static.springsource。 org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config – Jaiwo99

回答

6

這是Spring的一個最基本的概念 - 控制反轉。

您不需要使用其實現類型聲明您的依賴關係(以避免與實現耦合)。您可以使用接口或超類來聲明它們,並讓Spring在上下文中找到適當的實現類。

換句話說,bean並沒有通過它們的實現類來區分,因爲你可能想要改變bean的實現類而不改變依賴它的bean。如果你想在同一類型的不同豆加以區分,使用邏輯bean的名字改爲:

@Autowired @Qualifier("smartCardWrapper") 
private SmartCardWrapper smardCardWrapper; 

@Autowired @Qualifier("dummySmartCardWrapper") 
private SmartCardWrapper dummySmardCardWrapper; 
+0

我正在嘗試使用@Service public class TestProvider實現Runnable,但是當我嘗試自動裝配時,似乎Spring正在尋找一個Runnable服務。 ..爲什麼?如何讓它尋找TestProvider? – Tobia

+0

@Tobia:難道不是[這個問題](http://stackoverflow.com/questions/3754296/spring-autowire-not-behaving-as-expected/)? – axtavt

+0

問題似乎是一樣的...但我無法理解解決方案。我想定義bean放置@service註釋而不是他的超類或接口...我可以嗎? – Tobia

相關問題